http://www.jianshu.com/p/b9551a761419 懒加载
2016-11-23 09:28
330 查看
在iOS开发摸爬打滚了许久,谈谈自己学习以及开发iOS的一些经验,文章比较随性,算是记录自己的成长吧!希望有些我走的弯路以及曾经让我捉耳挠腮的问题可以帮助读者少走一些弯路。
本文来谈一谈在开发中非常实用的懒加载技术吧!
所谓的懒加载可以定义为:延时加载,即当对象需要用到的时候再去加载。其实就是所谓的重写对象的get方法,当系统或者开发者调用对象的get方法时,再去加载对象。需要注意:重写get方法时,先判断对象当前是否为空,为空的话再去实例化对象
懒加载的优点
不需将对象的实例化写到viewDidLoad,可以简化代码,增强代码的可读性
对象的实例化在getter方法中,各司其职,降低耦合性
对系统的内存占用率会减小
viewDidLoad正常加载代码示例
没用懒加载的时候,从plist获取数据,返回一个数组,需要写在viewDidLoad方法中获取@interface ViewController () @property (nonatomic, strong) NSArray *shopData; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _shopData = [NSArray arrayWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"shop" ofType:@"plist"]]; } @end
显而易见,当控制器被加载完成后就会加载当前的shopData,假如shopData是在某些事件被触发的时候才会被调用,没必要在控制器加载完就去获取plist文件,如果事件不被触发,代表着shopData永远不会被用到,这样在viewDidLoad中加载shopData就会十分多余,并且耗用内存
懒加载代码示例
- (void)viewDidLoad { [super viewDidLoad]; } - (NSArray *)shopData { if (!_shopData) { _shopData = [NSArray arrayWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"shop" ofType:@"plist"]]; } return _shopData; } @end
当需要用到shopData的时候,就会调用[self shopData]的方法(即getter方法),此时系统会去调用getter方法,然后再getter方法中获取plist文件内容,然后返回使用(需要注意在getter方法里切勿使用self.shopData,因为self.shopData会调用getter方法,造成死循环)
总结:懒加载即用到时方去加载对象
文/维尼的小熊(简书作者)原文链接:http://www.jianshu.com/p/b9551a761419
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关文章推荐
- iOS App图标和启动画面尺寸http://www.jianshu.com/p/adpKye
- LaunchMode页面加载模式 http://www.eoeandroid.com/thread-544077-1-1.html
- http://www.jianshu.com/u/10eec39371e0
- Android 端“被挤下线”功能的实现 2017-11-15 sun_____xin code小生 作者 | sun_____xin 地址 | http://www.jianshu.com/p/
- http://www.jianshu.com/p/94e0f9ab3f1d
- MFC加载皮肤 转自:http://www.cctry.com/thread-4032-1-1.html
- javascript 操纵Flash播放,显示Flash 加载进度 来自 http://www.enet.com.cn
- http://www.jianshu.com/p/2dd54ec0bb43 程序员纪录片
- iOS之简单瀑布流的实现 http://www.jianshu.com/p/b92e1b1073fd
- Hive系列之HSQL转换成MapReduce过程 ,http://www.jianshu.com/p/660fd157c5eb
- 该如何加载google-analytics(或其他第三方)的JS (转自http://www.cnblogs.com/BearsTaR/archive/2010/05/12/best_use_google_analytics.html)
- 我的简书地址 - http://www.jianshu.com/users/0b178bfe372a/latest_articles
- web.xml 中的listener、 filter、servlet 加载顺序及其详解___http://www.cnblogs.com/JesseV/archive/2009/11/17/16050
- http://www.jianshu.com/p/1e402922ee32/
- You cannot start a load for a destroyed activity 问题的解决办法,链接文章最后 http://www.jianshu.com/p/519bb23
- VS2012 编译程序时报无法加载PDB文件错误解决方案(转自http://www.aiuxian.com/article/p-236400.html)
- vim安装:http://www.jianshu.com/p/a0b452f8f720
- Mybatis Generator最完整配置详解 http://www.jianshu.com/p/e09d2370b796
- http://www.jianshu.com/p/a5c0844a0590
- 推荐10 个短小却超实用的 JavaScript 代码段(http://www.jianshu.com/p/3ef822ec5a63)