2

我应该使用 NSNumber 还是字符串来保存一个简单的“playerID 号”,现在它是一个整数,因为我想用 Core Data 保存它?

在我的数据模型中,我将 playerID 设置为 Integer 16,但 Core Data 希望 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].

确保还检查如何将其用于枚举:Best way to implement Enums with Core Data(寻找我的答案)。

于 2012-08-22T20:08:22.947 回答
2

NSNumber 比 NSString 更有效地将值存储在内存中。因为 NSNumber 使用称为标记指针的运行时工具来提高速度并减少内存使用(查看更多信息

另外我认为 NSNumber 在 CoreData 中占用的空间比 NSString 少。

于 2012-08-21T17:23:59.377 回答
0

在使用 Xcode 创建 NSManagedObject 文件时,您可以使用原始值生成属性。但是,您应该知道 NSNumber 是一个抽象类,运行时类类型将取决于用于创建 NSNumber 的值。

于 2012-08-22T20:52:34.623 回答