以下代码:
- (id)initWithMediaCollection:(MPMediaItemCollection *)mediaCollection collectionCategory:(NSString *)collectionCategory
{
self = [super init];
if (self) {
_mediaCollection = mediaCollection;
uint64_t persistentID = mediaCollection.persistentID;
_collectionID = [NSNumber numberWithUnsignedLongLong:persistentID];
}
return self;
}
我调试然后设置断点。这个init方法第一次运行时,它运行正常:
persistentID uint64_t 6071794744315787357
_collectionID __NSCFNumber *(长)6071794744315787357
第二次,我得到了这些值:
persistentID uint64_t 14938043870126423662
_collectionID __NSCFNumber *(长)-3508700203583127954
第二次为什么值不相同?当我明确地将其声明为无符号时,为什么它是否定的?
答案 0 :(得分:0)
numberWithUnsignedLongLong工作正常。很大程度上取决于你打印它的确切程度。你方便地省略了。
答案 1 :(得分:0)
区别在于NSInteger
是“已签名”值,而uint64_t
则不是。在上面的两个值之间,二进制表示都是:
1100111101001110100101111100000100110110000101100011111001101110 1100111101001110100101111100000100110110000101100011111001101110
根据这两个网站:
这是一个如何以二进制位表示数字的链接: https://en.wikipedia.org/wiki/Signed_number_representations