4

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

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

任何帮助将不胜感激。

4

3 回答 3

8

以下是旧 SDKNSInteger中“”中“”的定义方式: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" 和其他类似的显式类型,所以当我看到这些时,我会尝试在我正在使用的代码中匹配他们的风格.

于 2012-08-09T03:24:55.190 回答
0

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

于 2012-08-09T05:25:49.737 回答
0

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

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

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

于 2018-02-01T10:12:24.623 回答