objective-c – int32_t到NSInteger转换是否有任何问题?

我正在使用数据类型int32_t为iOS创建一个位掩码.然后将其设置为接受NSInteger的变量.这没有像预期的那样抛出编译时错误,但我想知道 – 是否有某种方式可能导致将来运行时错误?
一般来说,它会起作用. NSInteger总是至少32位长.如果它是64位,您的号码将被符号扩展以匹配(您可能需要投射它).它不会导致运行时错误.

有关NSInteger的详细信息

使用以下代码(来自NSObjCRuntime.h)定义NSInteger:

#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在编译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位.

相关文章
相关标签/搜索