用于解析iOS中基元类型的编码标准

时间:2013-12-18 17:30:14

标签: ios iphone objective-c json primitive-types

在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];

感谢。

5 个答案:

答案 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
}

其中registeredNSNumber,看起来像BOOL

答案 4 :(得分:0)

接近是一个“双头”的方法:

@property(nonatomic, strong) NSNumber* myBoolObj;
-(BOOL)myBool;

...

-(BOOL)myBool {
    return myBoolObj.boolValue;
}

通过专门选择以某个单词结尾的名称,例如“Obj”(并且对所有此类“混合”属性一致地使用该后缀),您不应该意外地使用myBoolObj,而不是{{1} }}。但是你仍然可以轻松地将值分配给NSDictionaries和NSArrays等。