NSInteger
是这样定义的:
#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
这导致
NSInteger
在32位iOS上定义为int,即使int和long仍然相同(均为4个字节)。如下所示的格式字符串会使用此定义生成警告:NSInteger x = 4;
[NSString stringWithFormat: @"%ld", x];
// Warning: Values of type 'NSInteger' should not be used as format arguments;
// add an explicit cast to 'long' instead.
那么有人知道为什么
NSInteger
并不总是定义得那么长吗?
最佳答案
出于历史原因,以前的API版本使用了int
,随后又被迁移为使用typedef NSInteger
ca。 OS X的64位过渡。
我想它们可能会为iOS更改,但是如果OS X和iOS上的代码不同,那么这将影响许多现有和待开发的代码。
关于ios - 为什么NSInteger在32位iOS上没有定义为long?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23777504/