2

コアデータと一緒に保存したいので整数になった単純な「playerID番号」を保存するために、NSNumberまたは文字列を使用する必要がありますか?

私のデータモデルでは、playerIDを整数16に設定していますが、CoreDataはNSNumberを機能させたいと考えています。これは、「何もない」ための多くのコードのようです-例;

NSInteger myValue = 1;
NSNumber *number = [NSNumber numberWithInteger:myValue];
p1.playerID = number;

// Instead of just;
p1.playerID = 1;
// or
p1.playerID.myIntValue;

代わりに文字列に設定してから、必要に応じて値(playerID)を前後に変換する方が簡単ではないかと思いませんか?これについての知恵(経験)の言葉はありますか?ありがとう :-)

4

3 に答える 3

10

エンティティで、次の@propertyように定義します。

@property (nonatomic) int32_t playerID;

そして、次のように簡単に設定できます

p1.playerID = 1;

これは非常にエレガントで非常に高速です。

つまり、 . であると定義しないでくださいNSNumber *。しかし、そうしたとしても、パフォーマンスは依然として優れています。このようなコードを読み書きする方が簡単です。また、最新の Xcode バージョンでは@(myInt)、代わりに[NSNumber numberWithInt:myInt].

列挙型にこれを使用する方法も確認してください:コアデータで列挙型を実装する最良の方法(私の答えを探してください)。

于 2012-08-22T20:08:22.947 に答える
2

NSNumber は、NSString よりもメモリに値を格納するのにはるかに効率的です。NSNumber は、タグ付きポインターと呼ばれる実行時機能を使用して速度を上げ、メモリの使用量を減らすため (詳細情報を参照)

また、NSNumber は NSString よりも CoreData で占めるスペースが少ないと思います。

于 2012-08-21T17:23:59.377 に答える
0

Xcode を使用して NSManagedObject ファイルを作成するときに、プリミティブ値を使用してプロパティを生成できます。ただし、NSNumber は抽象クラスであり、実行時のクラス タイプは NSNumber の作成に使用された値に依存することを知っておく必要があります。

于 2012-08-22T20:52:34.623 に答える