懒加载
懒加载也称作延迟加载,就是在需要的时候进行加载,加载过了就不会再加载,节约系统资源。常在存放网络数据的数组中,控制器的view,控件自定义的时候进行应用。
实现思路
- 在类中创建一个属性
- 重写对应的getter方法,将要实现的逻辑放到这个getter中
- 在实现之前,要判断这个属性是否为空,为空才执行,否则直接返回。
实例代码
- 存放网络数据的数组
@property (nonatomic,strong) NSMutableArray *data;
@end
- (NSMutableArray *)users
{
if (!_data) {
_data = [NSMutableArray array];
}
return _data;
}
以后要使用data数组装数据时,直接使用就可以了
- 控件的自定义
通常添加子控件在init方法中对子控件进行初始化
当要添加的子控件比较多的时候,此时方法中代码就会显得很多,可读性较差,并且这样可以节省内存资源
- (UIButton *)readButton {
if (!_readButton) {
UIButton *button = [[UIButton alloc] init];
[self addSubview:button];
[button setTitle:@"读书" forState:UIControlStateNormal];
_readButton = button;
}
return _readButton;
}
在viewDidLoad中,或者在Init方法中,调用懒加载,[self readButton]
注意点
要注意getter方法的嵌套
- (UIButton *)readButton {
//这里造成程序崩溃,自身死循环
if (self.readButton) {
UIButton *button = [[UIButton alloc] init];
[self addSubview:button];
[button setTitle:@"读书" forState:UIControlStateNormal];
self.readButton = button;
//这里可以是因为这里使用的是setter方法
}
return _readButton;
//或者在这里写成:return self.readButton;
}
所以在这里面使用懒加载时,不要使用点语法
优点
- 每个属性的getter方法中分别负责各自的实例化处理,因此可读性更强、独立性更强,代码彼此之间的独立性强,松耦合
- 只有当真正需要资源时,再去加载,节省了内存资源