NSUInteger
タイプのプロパティを でエンコードおよびデコードする必要がありますNSCoder
。
安全に使用できNSCoder::encodeInteger:forKey:
、NSCoder::decodeIntegerForKey:
その方法はありますか?
私の頭に浮かぶ別の方法は、符号なし整数をNSNumber
最初にラップすることです。しかし、それはコードが増えることを意味し、私はそれがあまり好きではありません。
NSUInteger
タイプのプロパティを でエンコードおよびデコードする必要がありますNSCoder
。
安全に使用できNSCoder::encodeInteger:forKey:
、NSCoder::decodeIntegerForKey:
その方法はありますか?
私の頭に浮かぶ別の方法は、符号なし整数をNSNumber
最初にラップすることです。しかし、それはコードが増えることを意味し、私はそれがあまり好きではありません。
そのために NSCoder::encodeInteger:forKey: および NSCoder::decodeIntegerForKey: メソッドを使用しても安全ですか?
はい、安全です。OS X および iOS のすべてのアーキテクチャは、 符号付きの数値を表すために2 の補数を使用するためです。たとえば (32 ビット アーキテクチャを想定)、
NSUInteger n = 0xFFFFFFFF;
[aCoder encodeInteger:n forKey:@"n"];
n
は、同じメモリ表現を持つ符号付き整数に変換され-1
ます。
そして
NSUInteger n = [aDecoder decodeIntegerForKey:@"n"];
符号-1
付き整数は同じメモリ表現で符号なし整数に変換されるため、元の値が返されます。