我正在使用数据类型 int32_t 为 iOS 创建一个位掩码。然后将其设置为接受 NSInteger 的变量。这不会像预期的那样引发编译时错误,但我想知道 - 是否有某种方式可能导致未来的运行时错误?
问问题
3938 次
1 回答
7
一般来说,它会起作用。NSInteger 将始终至少为 32 位长。如果它是 64 位,您的号码将被符号扩展以匹配(您可能需要转换它)。它不会导致运行时错误。
关于 NSInteger 的详细信息
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
这意味着这NSInteger
相当于long
编译 64 位、嵌入式操作系统、iPhone、Windows 或构建 32 位(如 64 位)时。否则,它等价于int
。因为int
和int32_t
是等价的,所以你可以在 OS X 上的 32 位应用程序中使用。对于其他情况,这取决于long
.
在 64 位 OS X 应用程序中,long
是一个 64 位数字。在 iPhone 上,long
是一个 32 位数字。我不了解 Windows,我不确定在构建 32 位和 64 位时它是使用 32 位还是 64 位长。
于 2011-03-29T18:39:26.687 回答