iOS懒加载的本质就是重写属性的get方法,当调用该属性的get方法时才去初始化该对象。
敲黑板划重点了:我前几天有一个思路,是结合懒加载来调用网络请求,完成后测试运行未发现问题,但是在进行代码优化时发现一些缺陷,今天分享之... ...
一般我们的懒加载是这样的
- (NSArray *)TitleNameArray{
if (!_TitleNameArray) {
_TitleNameArray = @[@[@"持卡人姓名",@"卡号"],
@[@"银行",@"持卡人身份证号"],];
}
return _TitleNameArray;
}
结合网络请求后我这样写
- (NSArray *)bankInforArray{
if (!_bankInforArray) {
[AgentServiceData getAgentBankName:UserNO success:^(id result) {
if ([result[@"IsOK"] integerValue] == 1 } {
_bankInforArray = [AgentAddBankAccountModel arrayOfModelsFromDictionaries:result[@"List"] error:nil];
[self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:1]] withRowAnimation:UITableViewRowAnimationNone];
}
}];
}
return _bankInforArray;
}
注意:懒加载调用内部不能用 **点语法 ** 或者 发消息 调用该属性,因为这两种方法本质都是调用get方法,会造成死循环。
重点来了:该页面是基于UItableView,我发现每次刷新页面时会多次调用网络请求。那么为什么呢?因为网络请求是需要时间的!!!即我每次使用self. bankInforArray调用时,都会进入懒加载方法,可能第二次,第三次,甚至第四次调用时,第一次调用的网络请求才成功返回数据,那么直到此时_bankInforArray才不会为空,那么将导致该网络请求方法被调用了3次之多。
总结:懒加载适用于两种情况:只需要初始化一次的一些属性 和 没有时间延迟的情况。