gpt4 book ai didi

objective-c - int32_t 到 NSInteger 转换有什么问题吗?

转载 作者:太空狗 更新时间:2023-10-30 04:01:32 26 4
gpt4 key购买 nike

我正在使用数据类型 int32_t 为 iOS 创建一个位掩码。然后将其设置为接受 NSInteger 的变量。这不会像预期的那样引发编译时错误,但我想知道 - 是否有某种方式可能会在将来导致运行时错误?

最佳答案

一般来说,它会起作用。 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 编译时,或者像 64 位一样构建 32 位时。否则,它等同于 int .自 intint32_t是等价的,你在 OS X 上的 32 位应用程序中就可以了。对于其他情况,这取决于 long 的大小。 .

在 64 位 OS X 应用程序中,long是一个 64 位数字。在 iPhone 上,long是一个 32 位数字。我不知道 Windows,我不确定它在像 64 位一样构建 32 位时使用的是 32 位还是 64 位长。

关于objective-c - int32_t 到 NSInteger 转换有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5476701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com