在iOS中进行延迟初始化

在iOS中进行延迟初始化,第1张

概述数据来自 JSON中的服务器,它放在NSDictionary中.根据所请求数据的类型,将从此NSDictionary创建新的类对象.有很多数据出现,因此该对象包含对NSDictionary的引用,并仅在引用特定变量时提取值.像延迟初始化的东西: - (NSString *)imgURL { if (_imgURL == nil) { _imgURL = [self make 数据来自 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中进行延迟初始化所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1113837.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存