В чем основное различие между int
, NSInteger
и NSUInteger
в Objective-C?
Какой из них лучше использовать в приложении и почему?
В чем основное различие между int
, NSInteger
и NSUInteger
в Objective-C?
Какой из них лучше использовать в приложении и почему?
В таких случаях вы можете щелкнуть правой кнопкой мыши и перейти к определению:
#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
Разница заключается в абстрактных типах и связанных с ними размерах аппаратного обеспечения. Таким образом, теперь нам не нужно беспокоиться о том, каков размер int или насколько велик его указатель на любом конкретном оборудовании.
«C» в этом плохо, только заявляет, что long не меньше, чем int, что int — это «естественный» целочисленный размер аппаратного обеспечения (что бы это ни значило), что int не меньше, чем int короткий - a (большой беспорядок).
В то время это казалось хорошей идеей, пришедшей из Фортрана, но не устаревающей.
Можно использовать определения POSIX, такие как uint32_t, int16_t и т. д. Но это также не касается того, насколько большим должен быть указатель на каком-либо конкретном оборудовании.
Итак, если Apple определяет возвращаемый тип как NSUInteger, вы просто используете его, и вам не нужно знать, имеет ли он размер 16, 32 или 64 бита для вашего конкретного оборудования. (Я взял эти значения из эфира просто для примера).
Как вы можете видеть в @Bastian, фактический размер зависит от аппаратного обеспечения.
Документация отвечает на "букву вопроса", но не дает понимания "почему"?
NSInt
. - person BoltClock   schedule 02.10.2011