iOS懒加载的一些思考

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次之多。

总结:懒加载适用于两种情况:只需要初始化一次的一些属性 没有时间延迟的情况。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,869评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,007评论 25 709
  • AFHTTPRequestOperationManager 网络传输协议UDP、TCP、Http、Socket、X...
    Carden阅读 10,560评论 0 12
  • 什么样的人会生活爱思考的什么样的人是智者察人知己的 不要让自己沦为寂寞的单身蜷缩在不良情绪之中瑟瑟发抖 不要让美丽...
    悠然不是梦阅读 1,693评论 0 4
  • 每每国庆来临之际,除了组团去整容,现在还流行去海外置业。 前些年的海外置业市场中,听到最多的是在美国、澳洲、加拿大...
    whoogaoqiao阅读 1,589评论 0 0

友情链接更多精彩内容