在iOS开发过程中,经常会用到懒加载技术,比如我们存放网络数据的数组,自定义的控件,复杂的运算逻辑等等情况下都会用到懒加载技术。下面介绍一下什么是懒加载
懒加载:
1、也被成为延迟加载,主要的特点是:用到时再加载,不用不加载,可以提高性能节约支出;
2、加载过之后就不会再次加载,节约了系统资源;
3、对于实际开发中可能会遇到的一些顺序问题,懒加载可以作为一个很好的解决方案。
懒加载的实现思路:
1、在类扩展(category)中创建一个属性;
2、重写这个属性对应的getter,将要实现的逻辑放到这个getter中;
3、考虑到懒加载只加载一次,那么在实现逻辑之前应该判断一下这个属性是否为空,为空才执行逻辑,否则直接返回这个属性。
示例代码:
/**
* 基类表单tableview
*/
@property (nonatomic, strong) XXTableView *baseTableView;
- (XXTableView *)baseTableView {
if (!_baseTableView) {
XXTableView *baseTableView = [[XXTableView alloc] initWithFrame:CGRectMake(0, 64, SCREEN_WIDTH, SCREEN_HEIGHT- 64) style:UITableViewStylePlain];
baseTableView.delegate = self;
baseTableView.dataSource = self;
baseTableView.scrollsToTop = YES;
baseTableView.tableFooterView = [[UIView alloc] init];
[self.view addSubview:baseTableView];
_baseTableView = baseTableView;
}
return _baseTableView;
}
这是我写在基类中的表单,在子类中,需要用到的时候,直接self.baseTableView就好了,无需创建,在没调用该方法之前,baseTableView并没有创建,在调用该方法是,才进行创建,并且只创建一次。
注:有很多人在编码过程中,习惯使用OC的点语法,点语法可以很方便的帮助开发人员通过属性的getter和setter去操作成员变量,但在懒加载的编写过程中,尽量不要是用点语法,因为这个时候使用点语法一不小心很可能会导致程序进入死循环。举例:在书写懒加载的时候,if (!_baseTableView) 这里一定不能使用点语法,不然就会导致死循环;_baseTableView= baseTableView这里可以使用self.baseTableView = baseTableView,因为这里是调用的setter方法
网友评论