【发布时间】:2013-04-13 00:59:20
【问题描述】:
当我尝试使用大于 -2 且小于 13 的数字的 numberWithLongLong 创建 NSNumber 时,它会返回一个转换为 (int) 的数字。
如果我在越过我的线路后查看 Xcode 调试器就会看到这一点。
NSNumber* numberA = [NSNumber numberWithLongLong:-2]; //Debugger shows as (long)-2
NSNumber* numberB = [NSNumber numberWithLongLong:-1]; //Debugger shows as (int)-1
NSNumber* numberC = [NSNumber numberWithLongLong:12]; //Debugger shows as (int)12
NSNumber* numberD = [NSNumber numberWithLongLong:13]; //Debugger shows as (long)13
为了把我的问题放在上下文中,我使用一个 long long 值作为一个纪元日期,我最终将使用 BSON 序列化并通过线路发送到 Web 服务。网络服务要求日期为 java Long。
提前致谢
【问题讨论】:
-
嗯……你知道
sizeof(int) == sizeof(long)。两者都是 32 位有符号整数。见:stackoverflow.com/questions/2107544/… -
您可以在问题中添加的其他信息:数字 B 和 C 返回
"i"的objCType,而 A 和 D 返回"q"。当您使用LL为数字文字添加后缀或使用alloc/initWithLongLong:时,也会发生这种情况。在运行 iOS 5.1 的第三代 iPad 上的调试器中进行了此测试 -
您实际遇到的问题是什么?与您实际需要对
NSNumber对象执行的操作相比,调试器显示的内容并不十分相关。 -
@CarlVeazey 所以,
+numberWithLongLong:返回一个带有"i"objCType 的NSNumber 对象? -
为什么内部存储的数字大小真的很重要?我的意思是,只要你可以说
[number longLongValue]并得到正确的值...为什么运行时节省几个字节是个问题?这似乎是工作中的封装,我还不明白为什么不应该信任它。
标签: objective-c xcode nsnumber long-long