Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

#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

Ответ 2

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

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

Это казалось хорошей идеей в то время, когда я приехал из Фортрана, но не стал хорошо жить.

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

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

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

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