我可以使用NSCoder :: encodeInteger:forKey:和decodeIntegerForKey:参数类型为NSUInteger的方法吗?

Ras*_*sto 5 objective-c primitive-types nsinteger nsuinteger nscoder

我需要进行编码和解码类型的财产NSUIntegerNSCoder.

使用方法NSCoder::encodeInteger:forKey:NSCoder::decodeIntegerForKey:方法是否安全?

我想到的另一种方法是将无符号整数包装到NSNumber第一位.但这意味着更多的代码,我不喜欢它.

Mar*_*n R 5

使用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将转换回具有相同内存表示的无符号整数,以便您返回原始值.