Objective c 我可以使用NSCoder::encodeInteger:forKey:和decodeIntegerWorkey:方法,参数类型为nsInteger吗?

Objective c 我可以使用NSCoder::encodeInteger:forKey:和decodeIntegerWorkey:方法,参数类型为nsInteger吗?,objective-c,primitive-types,nsinteger,nscoder,nsuinteger,Objective C,Primitive Types,Nsinteger,Nscoder,Nsuinteger,我需要使用NSCoder对nsinteger类型的属性进行编码和解码 使用NSCoder::encodeInteger:forKey:和NSCoder::decodeeintegerworkey:方法是否安全 我想到的另一种方法是首先将无符号整数包装成NSNumber。但这意味着更多的代码,我不太喜欢它 使用NSCoder::encodeInteger:forKey:and安全吗 NSCoder::decodeIntegerWorkey:用于此的方法 是的,它是安全的,因为OSX和iOS上的所有

我需要使用
NSCoder
nsinteger
类型的属性进行编码和解码

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

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

使用NSCoder::encodeInteger:forKey:and安全吗 NSCoder::decodeIntegerWorkey:用于此的方法

是的,它是安全的,因为OSX和iOS上的所有架构都使用这两者的补充 用于表示有符号的数字。例如(假设为32位体系结构),在

n
被转换为具有相同内存表示形式的有符号整数,即
-1

而且

 NSUInteger n = [aDecoder decodeIntegerForKey:@"n"];

有符号整数
-1
被转换回具有相同内存表示形式的无符号整数,以便返回原始值。

这个答案对64位体系结构适用吗?@rmtheis:是的,我非常确定它适用(在64位体系结构上,NSUInteger是64位整数。我刚才给出了一个32位体系结构的示例)。
 NSUInteger n = [aDecoder decodeIntegerForKey:@"n"];