iOS中解析基元类型的编码标准
在iOS中解析原语类型(int、float、BOOL等),同时将它们存储在dataObjects中以供以后使用的最佳实践是什么 我应该解析它并将其存储为NSNumber,还是仅将其存储为基元类型属性 例如:如果我从服务器获取“userId”作为long类型。这应该是:iOS中解析基元类型的编码标准,ios,iphone,objective-c,json,primitive-types,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, strong) NSNumber *userId;
self.userId = [element objectForKey:@"user_id"];
或:
谢谢。在我看来,只要你不让他们沉迷于繁重的操作,就把它做成原始形式是一种很好的做法。这对编译器来说少了一个负担。当然,它甚至不需要处理器的时钟周期。但是,当你处理更多的数据时,它会变得更有效。如果你做了太多的数学运算或其他使用原始数据的事情 而且,您可以创建自己的getter和setter,如
-(long) getuserId
{
return userID;
}
-(void) setuserId:(long) userId
{
userID = userId;
}
但是,如果您不做任何复杂的操作,最好使用非原语。因为对像NSNumber这样的对象执行操作非常简单,它们带有预定义的方法来对它们执行操作 这实际上取决于你想要或需要用它做什么。
将其存储为NSNumber会增加一些开销,并为转换为其他值类型和在集合对象中插入等操作带来很多便利 数据类型是数字吗?如果不是,我就不会把它作为一个存储 假设您将
BOOL
存储为NSNumber
:查看代码的后期开发人员可能会认为以下代码就足够了:
if (_registered) {
// whatever
}
其中,registed
是一个看起来像BOOL
的NSNumber
,方法是一个“双头”方法:
通过特别选择以“Obj”等词结尾的名称(并对所有此类“混合”属性一致使用该后缀),您不会无意中使用
myBoolObj
,而您的意思是myBool
。但是,您仍然可以轻松地向NSDictionary和NSArray等分配值。如果您想将它们存储在NSArray或NSDictionary中,那么NSNumber等显然是一个不错的选择。但为了方便“日常”使用,原语类型更好。测试可能会特别令人沮丧,例如,一个布尔值的NSNumber,却忘了使用它的boolValue
。你的标题是关于解析的-但是,你的问题与解析无关。如果服务器向您发送JSON,JSON解析器将实际“解析”JSON文本并创建表示。您很可能永远不会亲自解析JSON,这是一个正确的观点。尽管我可以为_registed实现一个get方法,以返回[_registedboolvalue];
if (_registered) {
// whatever
}
@property(nonatomic, strong) NSNumber* myBoolObj;
-(BOOL)myBool;
...
-(BOOL)myBool {
return myBoolObj.boolValue;
}