В общем, будет работать.NSInteger всегда будет иметь длину не менее 32 бит.Если оно составляет 64 бита, ваш номер будет дополнен знаком (возможно, вам придется его преобразовать).Это не приведет к ошибкам во время выполнения.
Подробная информация о NSInteger
NSInteger определяется с помощью следующего кода (из NSObjCRuntime.h):
#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
Это означает, что NSInteger
эквивалентно long
при компиляции для 64-битной, встроенной ОС, iPhone, Windows или при сборке 32-битной, как 64-битной.В противном случае это эквивалентно int
.Поскольку int
и int32_t
эквивалентны, вы будете в порядке в 32-разрядных приложениях на OS X. В других ситуациях это зависит от размера long
.
В 64-разрядных приложениях OS Xlong
- это 64-битное число.На iPhone long
- это 32-битное число.Я не знаю о Windows, и я не уверен, использует ли она 32-битную или 64-битную длину при сборке 32-битной, как 64-битной.