2011-07-12 5 views
10

整数を辞書に書き込むことができず、.plistに書き込むことはできませんが、NSNumbersは毎回の保存や辞書からの読み込みではなく、アプリケーション全体でNSNumbersを使う方が良いでしょう。 plist?NSNumberとInt

+0

メモリの割り当ては高価です。変更可能なNSNumberに似た独自のクラスを作成したいかもしれません。 –

+0

'int'より' NSInteger'を優先します。これはOS Xのさまざまなバージョン間でより移植性があります。 – mouviciel

+0

'NSNumber'(オブジェクト)を' int'( "スカラー値")に置き換えることができます。すべての数値量をNSNumberに保持し、各計算の/から変換することは信じられないほど厄介です。一方、 'int'の代わりに' NSInteger'を使うことは、妥当なことです。 –

答えて

8

、そして、セグメントを選択したい場合は例えば

、:ちょうどあなたまで、PODの種類に固執必要を使用するにはオブジェクトベースの表現(例えば、NSNumber)。パフォーマンスはPODではるかに優れていますが、場合によってはNSNumberが必要になります。

いくつかのケースでは、それは意味が代わりにNSNumberを使用することがあります - これは通常、あるとき再利用NSNumberしばしば - これは、重複NSNumber秒のトンを避けることです。このような場合は、シリアライゼーションや一般的なobjcインタフェース(バインディング、トランスフォーマー、ディクショナリ)を超えてはほとんど実用的ではありません。


更新/詳細:にObjCランタイムは、いくつかのケースでは、いくつかのアーキテクチャ上の、およびいくつかのOSのバージョンで特定のタイプとドメインのNSNumber Sを表すタグ付けされたポインタに置き換えます。もともと数年前に書かれて以来、内部表現は変更されていますが、ここでは主題の良い紹介です:http://objectivistc.tumblr.com/post/7872364181/tagged-pointers-and-fast-pathed-cfnumber-integers-in。これを使うことができれば、割り当て、ロック、再カウント操作などの遅い操作からあなたを救うことができます。それにもかかわらず、タグ付きポインタはすべての数値を表すことができず、オーバーヘッドが発生するため、デフォルトの組み込み関数はNSNumber以上にする必要があります。タグ付きポインタは適用可能な場合は最適化されていますが、の番号が必要な場合は、組み込み関数と競合することはありません。

+1

大きなことは、KVCがオートボクシング、つまりスカラー型とNSNumberの間の変換をサポートしているため、プロパティでNSNumberを使用する必要性がほとんどないことです。 – DrMickeyLauer

+0

64ビットデバイスの影響を考慮して、これを改訂することをお勧めします。 – user

+2

@userアップデートが追加されました – justin

0

NSNumberは、NSValueラッパーオブジェクトから継承されたオブジェクトです。

intはオブジェクトではありません。

NSNumberを使用する場合、uはそれらと利用するためにより多くの機能を得ることができます。

http://developer..com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html

するNSNumberは、あなたがオブジェクトとして数値型を格納することができますクラスです。さまざまな型とメソッドを変換して数値の文字列表現を取得するメソッドがあります。 NSNumber型の可変日を使用している場合は、dayの値は変更されませんが、そのメモリアドレスは変更されません。

0

すべてはあなたの必要性に依存します。ただし、APIにを使用する必要がある場合は、を使用する必要があります。 NSNumberを使用するように頼んだら、NSNumberを使用してください。あなたはUISegmentedControlを使用している、とあなたが一般化として

[segmentedControl setSelectedSegmentIndex:aIntVar]; // Can not use NSNumber here 
// or 
[segmentedControl setSelectedSegmentIndex:[aNumber intValue]];