Ras*_*sto 5 objective-c primitive-types nsinteger nsuinteger nscoder
我需要进行编码和解码类型的财产NSUInteger有NSCoder.
使用方法NSCoder::encodeInteger:forKey:和NSCoder::decodeIntegerForKey:方法是否安全?
我想到的另一种方法是将无符号整数包装到NSNumber第一位.但这意味着更多的代码,我不喜欢它.
使用NSCoder :: encodeInteger:forKey:和NSCoder :: decodeIntegerForKey:方法是否安全?
是的,它是安全的,因为OS X和iOS上的所有体系结构都使用二进制补码 来表示有符号数.例如(假设一个32位架构),in
NSUInteger n = 0xFFFFFFFF;
[aCoder encodeInteger:n forKey:@"n"];
Run Code Online (Sandbox Code Playgroud)
n转换为具有相同内存表示的有符号整数,即-1.
并在
NSUInteger n = [aDecoder decodeIntegerForKey:@"n"];
Run Code Online (Sandbox Code Playgroud)
有符号整数-1将转换回具有相同内存表示的无符号整数,以便您返回原始值.