数据来自JSON中的服务器,它位于NSDictionary
中。根据所请求数据的类型,将从此NSDictionary
创建新的类对象。有大量数据出现,因此该对象包含对NSDictionary
的引用,并仅在引用特定变量时提取值。像延迟初始化的东西:
- (NSString *)imgURL {
if (_imgURL == nil) {
_imgURL = [self makeObjForKey:kImageURL];
}
return _imgURL;
}
这显着提高了应用程序的速度,但会产生其他问题:
NSDictionary
中没有值,则保持为零。然后,对于此变量的每次后续调用,都会在NSDictionary
中搜索它。NSCopying
协议)时,会复制所有变量,从整个NSDictionary
生成转换。解决方案:
NSDictionary
对象实例,但之后必须复制
再次解析相同的变量无论如何,这些解决方案并非最佳。也许有人面临类似的问题,可以建议其他技术。
答案 0 :(得分:3)
NSDictionary
查找速度非常快。除非这是一个真正庞大的字典,否则我不会过多担心查找。如果您有一些特别经常检查的属性,那么您可以使用特殊标志来优化它们,但我通常不会担心它。
对于复制,我的第一个建议是使这个对象成为一个值(不可变)对象。用JSON初始化它一次,然后不提供任何mutators(这可能就是你已经在做的)。然后复制是微不足道的;只需返回self
。您不需要制作真正的副本,因为所有副本都是可互换的。价值对象的一大好处是它们的复制价格便宜且容易。
如果您有时确实需要可变版本,请遵循NSArray
/ NSMutableArray
模式。然后只有可变版本才能处理副本(在这种情况下你应该只复制字典;而不是复制的对象)。