懒加载概念 懒加载-也称延迟加载,即在需要的时候才加载。
因为iOS设备的内存有限,如果一次就把所有将来可能用到的资源全部加载,会耗费大量内存。所以我们在程序启动时不加载资源,只有在运行到需要一些资源的时候,再去加载这些资源(其实是对getter方法重写)。其次,我们加载资源时一定要注意先判断是否已有了,如果没有那么再去进行实例化。
好处
- 不必将创建代码全部写在viewDidLoad方法中,增强可读性
- 每个控件的getter方法中分别负责各自的实例化处理,松耦合
- 节省内存资源
需要使用strong修饰,因为strong会使修饰对象的引用计数加一。如果使用weak的话,在创建对象后不立即引用,该对象可能会因为引用计数归0被销毁,导致返回空值。
@property (nonatomic, strong) UIImageView* backgrandView;
我们通过重写getter方法,完成懒加载(lazy loading)模式。对于此时的_backgrandView属性,如果不被调用就是一个空值,被调用就会实例化。
// 重写getter方法
- (UIView*) backgrandView {
// 判断该视图是否已经存在,若没有,则实例化
if (_backgrandView == nil) {
_backgrandView = [[UIImageView alloc] init];
_backgrandView.frame = self.view.bounds;
// 添加img图片
UIImage* backgrandImage = [UIImage imageNamed:@"backgrand.jpeg"];
[_backgrandView setImage:backgrandImage];
[self.view addSubview:_backgrandView];
}
return _backgrandView;
}
【ios|【iOS】懒加载】如果我们将上列代码的任一
_backgrandView
替换成self.backgrandView
,就会造成死循环。因为self.backgrandView
的本质就是调用该属性的getter方法,在这里就会重复调用getter方法陷入死循环。推荐阅读
- 【iOS逆向】某不知名App越狱检测
- IOS|ios 面试题一
- iOS|iOS Swift之RxSwift初探
- iOS|OCLint + Infer + Jenkins + SonarQube 搭建iOS代码静态分析系统
- iOS|iOS Guideline 3.1.1 - Business - Payments - In-App Purchase 审核被拒
- iOS|iOS kCFErrorDomainCFNetwork Code=303 错误解决方案
- 开源|免费开源iPhone推送消息工具+服务端-Bark
- flutter|【Flutter混合开发踩坑日记之‘applicationVariants‘ for extension ‘android‘】