核心数据NSNumber过度杀伤?

时间:2012-08-21 16:47:31

标签: ios core-data nsnumber

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

在我的数据模型中,我将playerID设置为Integer 16,但Core Data希望NSNumber能够正常工作。这似乎是lika很多代码“没有” - 例子;

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

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

只是想知道将它设置为字符串而不是更容易然后根据需要来回转换值(playerID)?对此有任何智慧(经验)的话?谢谢: - )

3 个答案:

答案 0 :(得分:10)

在您的实体上,定义@property,如下所示:

@property (nonatomic) int32_t playerID;

然后您就可以将其设置为

p1.playerID = 1;

这是非常优雅和非常快。

换句话说,不要将其定义为NSNumber *。但即使你这样做,表现仍然非常出色。读取和编写这样的代码更容易。另请注意,使用最新的Xcode版本,您可以使用@(myInt)代替[NSNumber numberWithInt:myInt]

请务必查看如何将其用于枚举:Best way to implement Enums with Core Data(寻找我的答案)。

答案 1 :(得分:2)

NSNumber在内存中存储的价值比NSString更有效。因为NSNumber使用称为标记指针的运行时工具来提高速度并减少memore的使用(See more information

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

答案 2 :(得分:0)

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