我需要对类型NSUInteger
的属性进行编码和解码NSCoder
。
使用NSCoder::encodeInteger:forKey:
和NSCoder::decodeIntegerForKey:
方法是否安全?
我想到的另一种方法是将无符号整数包装成NSNumber
第一个。但这意味着更多的代码,我不太喜欢它。
我需要对类型NSUInteger
的属性进行编码和解码NSCoder
。
使用NSCoder::encodeInteger:forKey:
和NSCoder::decodeIntegerForKey:
方法是否安全?
我想到的另一种方法是将无符号整数包装成NSNumber
第一个。但这意味着更多的代码,我不太喜欢它。
使用 NSCoder::encodeInteger:forKey: 和 NSCoder::decodeIntegerForKey: 方法是否安全?
是的,它是安全的,因为 OS X 和 iOS 上的所有架构都使用二进制补码 来表示带符号的数字。例如(假设是 32 位架构),在
NSUInteger n = 0xFFFFFFFF;
[aCoder encodeInteger:n forKey:@"n"];
n
被转换为具有相同内存表示的有符号整数,即-1
.
而在
NSUInteger n = [aDecoder decodeIntegerForKey:@"n"];
有符号整数-1
被转换回具有相同内存表示的无符号整数,以便您取回原始值。