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
并不总是被定义为长?
答案 0 :(得分:4)
历史原因,以前使用的API版本int
- 然后被迁移到使用typedef NSInteger
ca. OS X的64位转换。
我认为他们可能已经针对iOS进行了更改,但如果它们在OS X和iOS上有所不同,那么会影响很多现有的和待开发的代码。