use*_*446 3 xcode objective-c nsnumber long-long
当我尝试使用numberWithLongLong创建一个NSNumber,其数字大于-2且小于13时,它返回一个被转换为(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
为了将我的问题放在上下文中,我使用了一个很长的值来创建一个纪元日期,我将最终使用BSON进行序列化并通过网络发送到Web服务.Web服务要求日期为java Long.
提前致谢
您已经发现NSNumber(实际上,它的CFNumber对应物)具有-1到12之间的整数缓存.看看CFNumberCreate函数,CFNumber.c看看它是如何工作的.
看起来您可以通过传递自己的分配器来强制它不使用缓存CFNumberCreate.你需要查看CFAllocator文档.
但请注意,CFNumberCreate手册说明了这一点:
theType创建新CFNumber对象时不一定保留该参数.
所以,即使你绕过缓存,你可能不回来了一个对象,其objCType是q(这意味着long long).看起来当前的实现将返回,q但在未来的版本中可能会发生变化.
NSNumber如果需要保证objCType返回,则可以编写自己的子类q.阅读NSNumber类参考中的"Subclassing Notes".
| 归档时间: |
|
| 查看次数: |
1723 次 |
| 最近记录: |