懒加载:让控件和对象在最需要加载的时候加载,即推迟getter方法的执行,这样可以节省内存空间。例如,一个view控件 ,只有当这个view被显示的时候才去加载。一个tableViewCell中,只有设置了textLabel的内容,才会加载这个textLabel。
用一个ImageView来举例:
设置点击屏幕时ImageView显示:
不使用懒加载:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor lightGrayColor];
_lazyImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"headImage00.jpg"]];
_lazyImageView.frame = CGRectMake(100, 100, 100, 100);
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self.view addSubview:_lazyImageView];
}
使用懒加载:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor lightGrayColor];
}
- (UIImageView*)lazyImageView {
if(!_lazyImageView) {
_lazyImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"headImage00.jpg"]];
_lazyImageView.frame = CGRectMake(100, 100, 100, 100);
}
return _lazyImageView;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self lazyImageView];
[self.view addSubview:_lazyImageView];
}
注意在判空和return时不能写成self.xxx的样子,否则会循环调用getter方法,造成死循环。可以通过改写懒加载方法名,避免把方法名与实例变量重名来防止调用出错。