什么是懒加载
懒加载也称延迟加载,说的通俗一点,就是在开发中,当程序中需要利用的资源时。在程序启动的时候不加载资源,只有在运行当中需要一些资源时,再去加载这些资源,即在需要的时候才加载(效率低,占用内存小)。
懒加载的本质
本质上就是对一个实例的getter方法的重写。
懒加载的使用
例如我想使用懒加载在视图控制器上呈现出一个imageView
首先在.h文件中设置一个imgeView属性
@property(nonatomic, strong)UIImageView* lazyImageView;
在.m文件重写getter 方法
- (UIImageView*)lazyImageView {
if (!_lazyImageView) {
_lazyImageView = [[UIImageView alloc] init];
[_lazyImageView setImage:[UIImage imageNamed:@"lazy1.png"]];
_lazyImageView.frame = CGRectMake(120, 300, 160, 160);
[self.view addSubview:_lazyImageView];
}
return _lazyImageView;
}
在viewDidLoad 中调用getter方法;
[self lazyImageView];
懒加载的好处
- 懒加载不必写在
viewDidLoad 方法里面,每个属性的getter方法中分别负责各自的实例化处理,因此可读性更强、独立性更强。 - 懒加载可以防止实例为nil,因为在重写
getter 方法中,我们对该变量进行了判空,独立地做了安全检查。 - 懒加载节省内存资源,只有在需要用加载它时,才会进行调用懒加载
使用懒加载时需要注意的点
- 在重写
getter 方法时,懒加载内部的实例变量完全采用下划线的方式去判断及创建!或者传进getter 的参数名和自身成员变量名区分清楚,这样就能避免在懒加载内部调用变量名出现错误 - 使用懒加载时,必须注意getter方法嵌套,避免造成死循环,例如
- (UIImageView*)lazyImageView {
if (!_lazyImageView) {
_lazyImageView = [[UIImageView alloc] init];
[_lazyImageView setImage:[UIImage imageNamed:@"lazy1.png"]];
_lazyImageView.frame = CGRectMake(120, 300, 160, 160);
[self.view addSubview:_lazyImageView];
}
return self.lazyImageView;
}
在返回imageView时使用了点语法,形成循环引用
|