5

我需要对类型NSUInteger的属性进行编码和解码NSCoder

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

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

4

1 回答 1

5

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

于 2013-08-17T21:26:33.417 回答