gpt4 book ai didi

ios - 64 位/32 位混合环境中的 NSInteger 和 NSUInteger

转载 作者:IT王子 更新时间:2023-10-29 07:52:05 25 4
gpt4 key购买 nike

我在 NSLog/NSAssert 等调用中有相当数量的字符串格式说明符,它们使用 %d%u 以及 NSInteger(= 32 位上的 int )NSUInteger(= unsigned int on 32bit) 类型。

当将应用程序转换为 64 位时,这会发出警告(当然),因为 %ld %lu 现在变成了 longunsigned长类型。

简单地转换格式说明符当然会在 32 位构建中引入反向警告。
因此,我认为唯一没有警告的解决方案是使用 64 位说明符,并在 32 位构建中出现警告的任何地方转换为 64 位值类型。

但我想知道是否有专门针对 NSIntegerNSUInteger 类型的格式说明符可以在两种架构上工作而无需强制转换?

最佳答案

我认为最安全的方法是将它们装入 NSNumber 实例中。

NSLog(@"Number is %@", @(number)); // use the highest level of abstraction

由于 tagged pointer,此装箱通常不必创建新对象魔法。

如果您真的不想使用NSNumber,您可以像其他人建议的那样手动转换原始类型:

NSLog(@"Number is %ld", (long)number); // works the same on 32-bit and 64-bit

关于ios - 64 位/32 位混合环境中的 NSInteger 和 NSUInteger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20355439/

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