2013-08-09 9 views
5

タイプNSUIntegerのプロパティをNSCoderでエンコードしてデコードする必要があります。NSCoder :: encodeInteger:forKey:とdecodeIntegerForKey:NSUInteger型の引数を持つメソッドを使用できますか?

NSCoder::encodeInteger:forKey:NSCoder::decodeIntegerForKey:の方法を使用するのは安全ですか?

これ以外の方法は、符号なし整数をNSNumberにラップすることです。しかし、それはもっとコードを意味し、私はそれほど好きではありません。 forKey:と NSCoder :: decodeIntegerForKey:そのための方法

答えて

5

は、それが安全なNSCoder :: encodeIntegerを使用することですか? OS XとiOS上のすべてのアーキテクチャは、符号付きの数を表すため2の補数 を使用しているため

はい、それは、安全です。例えば-1で同じメモリ表現、符号付き整数に変換され

NSUInteger n = 0xFFFFFFFF; 
[aCoder encodeInteger:n forKey:@"n"]; 

nに、(32ビットアーキテクチャを仮定して)。

そして、あなたは元の値を取り戻すように

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

に符号付き整数-1は、同じメモリ表現でバック符号なし整数に変換されます。

+0

この回答は64ビットアーキテクチャでも当てはまりますか? – rmtheis

+0

@rmtheis:はい、私はかなり確信しています(NSUIntegerは64ビットアーキテクチャの64ビット整数です。私は32ビットの例を示しました)。 –

関連する問題