5

NSUIntegerタイプのプロパティを でエンコードおよびデコードする必要がありますNSCoder

安全に使用できNSCoder::encodeInteger:forKey:NSCoder::decodeIntegerForKey:その方法はありますか?

私の頭に浮かぶ別の方法は、符号なし整数をNSNumber最初にラップすることです。しかし、それはコードが増えることを意味し、私はそれがあまり好きではありません。

4

1 に答える 1

5

そのために 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付き整数は同じメモリ表現で符号なし整数に変換されるため、元の値が返されます。

于 2013-08-17T21:26:33.417 に答える