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