NSInteger是一个32位整数

时间:2012-08-09 03:11:56

标签: iphone ios nsinteger int32

我是否认为在ios环境中声明NSInteger意味着它只会是32位值?

我想知道,因为另一个不熟悉目标c的程序员告诉我使用int32,我在目标C中找到的唯一类似的东西是int32_t,_t代表'整数类型'..但是使用这些类型正在成为一种真正的痛苦,我觉得我没有从NSInteger这样的目标c提供的所有控制功能。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:7)

以下是旧版SDK中“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

截至2013年9月,iPhone现在可以运行64位芯片,这意味着NSInteger可能要大得多。

在我自己的编码中,如果我正在使用纯粹的Objective C,我会坚持使用NSInteger,因为那将来会证明我的代码。另一方面,开源的东西和某些程序员喜欢使用“uint32_t”或“int32_t”以及其他类似的显式类型,所以当我看到这些时,我会尝试匹配他们的风格我正在做的代码与它一起工作。

答案 1 :(得分:0)

typedef的存在是为了保护你免受基类型的影响,这就是为什么你使用它们而不是原始类型它被称为可移植性。

答案 2 :(得分:0)

更新iOS 11:NSInteger可以是32位或64位,具体取决于构建的应用程序和iOS版本。

  

构建32位应用程序时,NSInteger是一个32位整数。一个   64位应用程序将NSInteger视为64位整数。

https://developer.apple.com/documentation/objectivec/nsinteger