我是否认为在ios环境中声明NSInteger意味着它只会是32位值?
我想知道,因为另一个不熟悉目标c的程序员告诉我使用int32,我在目标C中找到的唯一类似的东西是int32_t,_t代表'整数类型'..但是使用这些类型正在成为一种真正的痛苦,我觉得我没有从NSInteger这样的目标c提供的所有控制功能。
非常感谢任何帮助。
答案 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