在iOS中解析基本类型(int,float,BOOL等)的最佳实践是什么,同时将它们存储在dataObjects中供以后使用。
我应该解析它并将其存储为NSNumber,还是仅将其存储为原始类型属性?
例如:如果我从服务器获取'userId'为 long 类型。应该是:
@property (nonatomic, strong) NSNumber *userId;
self.userId = [element objectForKey:@"user_id"];
或:
@property (nonatomic, assign) long userId;
self.userId = [[element objectForKey:@"user_id"] longValue];
感谢。
答案 0 :(得分:1)
在我看来,只要你不沉溺于沉重的行动中,以原始的形式拥有它是一个好习惯。它减轻了编译器的负担。当然,它甚至不会花费处理器的时钟周期。但是,随着您转向大量数据,它会变得高效。
答案 1 :(得分:0)
如果你做了太多的数学运算或某些东西使用原始数据..
而且,你可以创建自己的getter和setter,比如
-(long) getuserId
{
return userID;
}
-(void) setuserId:(long) userId
{
userID = userId;
}
但是如果你不做任何复杂的操作,最好坚持使用非原语。由于在像NSNumber这样的对象上执行操作非常简单,并且它们带有预定义的方法来对它们执行操作。
答案 2 :(得分:0)
这实际上取决于你想要或需要做什么。 将其存储为NSNumber会增加一些开销,并为转换为其他值类型和插入集合对象等事项带来很多便利。
答案 3 :(得分:0)
数据类型是否为数字?如果不是,我不会把它存储为一个。
考虑将BOOL
存储为NSNumber
:稍后开发人员查看您的代码可能会认为以下代码已足够:
if (_registered) {
// whatever
}
其中registered
是NSNumber
,看起来像BOOL
。
答案 4 :(得分:0)
接近是一个“双头”的方法:
@property(nonatomic, strong) NSNumber* myBoolObj;
-(BOOL)myBool;
...
-(BOOL)myBool {
return myBoolObj.boolValue;
}
通过专门选择以某个单词结尾的名称,例如“Obj”(并且对所有此类“混合”属性一致地使用该后缀),您不应该意外地使用myBoolObj
,而不是{{1} }}。但是你仍然可以轻松地将值分配给NSDictionaries和NSArrays等。