Разница между int, NSInteger и NSUInteger

В чем основное различие между int, NSInteger и NSUInteger в Objective-C?

Какой из них лучше использовать в приложении и почему?


person Hitarth    schedule 02.10.2011    source источник
comment
Нет такого понятия, как NSInt.   -  person BoltClock    schedule 02.10.2011


Ответы (2)


В таких случаях вы можете щелкнуть правой кнопкой мыши и перейти к определению:

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
person Bastian    schedule 02.10.2011

Разница заключается в абстрактных типах и связанных с ними размерах аппаратного обеспечения. Таким образом, теперь нам не нужно беспокоиться о том, каков размер int или насколько велик его указатель на любом конкретном оборудовании.

«C» в этом плохо, только заявляет, что long не меньше, чем int, что int — это «естественный» целочисленный размер аппаратного обеспечения (что бы это ни значило), что int не меньше, чем int короткий - a (большой беспорядок).

В то время это казалось хорошей идеей, пришедшей из Фортрана, но не устаревающей.

Можно использовать определения POSIX, такие как uint32_t, int16_t и т. д. Но это также не касается того, насколько большим должен быть указатель на каком-либо конкретном оборудовании.

Итак, если Apple определяет возвращаемый тип как NSUInteger, вы просто используете его, и вам не нужно знать, имеет ли он размер 16, 32 или 64 бита для вашего конкретного оборудования. (Я взял эти значения из эфира просто для примера).

Как вы можете видеть в @Bastian, фактический размер зависит от аппаратного обеспечения.

Документация отвечает на "букву вопроса", но не дает понимания "почему"?

person zaph    schedule 02.10.2011
comment
вы правы. мы видим только разницу между ними, но почему? я все еще не понимаю, пожалуйста, предложите мне - person Hitarth; 02.10.2011
comment
Это стандартизация API. Эти фреймворки поставляются с несколькими архитектурами — хорошо, если API будет одинаковым для всех них. Имея эти определения типов, Apple абстрагирует различия платформ от потребителей API. Если вы говорите об API только с точки зрения этих типов, то (теоретически) вам не нужно думать о различиях платформ при компиляции одного и того же кода для i386, x86_64, ppc, arm7 или чего-то еще. Это абстракция. Было сказано, что вы должны использовать самый высокий уровень абстракции, который выполняет работу. Поэтому, если у вас нет причин НЕ использовать эти типы, я говорю, используйте их. - person ipmcc; 02.10.2011