在iOS中进行延迟初始化

数据来自 JSON中的服务器,它放在NSDictionary中.根据所请求数据的类型,将从此NSDictionary创建新的类对象.有很多数据出现,因此该对象包含对NSDictionary的引用,并仅在引用特定变量时提取值.像延迟初始化的东西:
- (NSString *)imgURL {
    if (_imgURL == nil) {
        _imgURL = [self makeObjForKey:kImageURL];
    }
    return _imgURL;
}

这显着提高了应用程序速度,但产生了其他问题:

>如果NSDictionary中没有值,则它仍为零.然后,对于此变量的每次后续调用,都会在NSDictionary中搜索它.
>复制整个类的实例(NSCopying协议)时,将复制所有变量,从整个NSDictionary生成转换.

解决方案:

>放置一些表示已检查值的标志.但是你呢
必须添加额外的检查
>只复制NSDictionary用于对象实例,但后来必须复制
再次解析相同的变量

无论如何,这些解决方案并非最佳.也许有人面临类似的问题,可以建议其他技术.

解决方法

NSDictionary查找速度非常快.除非这是一个真正庞大的字典,否则我不会过多担心查找.如果您有一些特别经常检查的属性,那么您可以使用特殊标志来优化它们,但我通常不会担心它.

对于复制,我的第一个建议是使这个对象成为一个值(不可变)对象.用JSON初始化它一次,然后不提供任何mutators(这可能就是你已经在做的).然后复制是微不足道的;回归自我.您不需要制作真正的副本,因为所有副本都是可互换的.价值对象的一大好处是它们复制的便宜和简单.

如果您有时确实需要可变版本,请遵循NSArray / NSMutableArray模式.然后只有可变版本才能处理副本(在这种情况下,你应该只复制字典;而不是缓存的对象).

以上是来客网为你收集整理的在iOS中进行延迟初始化全部内容,希望文章能够帮你解决在iOS中进行延迟初始化所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。