懒加载一定要记得判断是否存在该对象!

今天发现一个问题搞了一个下午,异步网络加载和表格刷新控件混用的时候,懒加载出现了问题

之前我是这样写的

/**
 *  初始化表格
 */
- (UITableView *)tableView {
    
        _tableView = [[UITableView alloc]
                      initWithFrame:CGRectMake(0, TABLETOPVIEW_HEIGHT, SCREEN_WIDTH,
                                               TABLEVIEW_HEIGHT)
                      style:UITableViewStylePlain];
        [_tableView setDataSource:self];
        [_tableView setDelegate:self];
        [_tableView setBackgroundColor:NORMAL_BACKGROUND_COLOR];
        [_tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];
        [_tableView setSeparatorInset:UIEdgeInsetsZero];
        [ToolFunClass setExtraCellLineHidden:_tableView];
        
        __weak typeof(self) weakSelf = self;
        
        // 添加传统的下拉刷新
        // 设置回调(一旦进入刷新状态就会调用这个refreshingBlock)
        [_tableView addLegendHeaderWithRefreshingBlock:^{
            [weakSelf.tableView.footer resetNoMoreData];
            [weakSelf loadNewData];
        }];
        
        // 添加传统的上拉刷新
        // 设置回调(一旦进入刷新状态就会调用这个refreshingBlock)
        [_tableView addLegendFooterWithRefreshingBlock:^{
            [weakSelf loadMoreData];
        }];
    return _tableView;
}

然后我发现我的表格下拉刷新动画一直卡着,就是不加载数据,上网查了下原因是由于懒加载没有判断控件是否已经加载,导致重复执行两次init事件,重置了表格的header.state,所以解决方法就是加上

/**
 *  初始化表格
 */
- (UITableView *)tableView {
    //加上空值判断,防止重复init
    if (!_tableView) {
        _tableView = [[UITableView alloc]
                      initWithFrame:CGRectMake(0, TABLETOPVIEW_HEIGHT, SCREEN_WIDTH,
                                               TABLEVIEW_HEIGHT)
                      style:UITableViewStylePlain];
        [_tableView setDataSource:self];
        [_tableView setDelegate:self];
        [_tableView setBackgroundColor:NORMAL_BACKGROUND_COLOR];
        [_tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];
        [_tableView setSeparatorInset:UIEdgeInsetsZero];
        [ToolFunClass setExtraCellLineHidden:_tableView];
        
        __weak typeof(self) weakSelf = self;
        
        // 添加传统的下拉刷新
        // 设置回调(一旦进入刷新状态就会调用这个refreshingBlock)
        [_tableView addLegendHeaderWithRefreshingBlock:^{
            [weakSelf.tableView.footer resetNoMoreData];
            [weakSelf loadNewData];
        }];
        
        // 添加传统的上拉刷新
        // 设置回调(一旦进入刷新状态就会调用这个refreshingBlock)
        [_tableView addLegendFooterWithRefreshingBlock:^{
            [weakSelf loadMoreData];
        }];

    }
    return _tableView;
}
时间: 2024-11-03 20:47:15

懒加载一定要记得判断是否存在该对象!的相关文章

懒加载原理分析

最近添加了相册功能到网站上,一旦打开浏览器就会加载大量图片,从而造成页面的卡顿和跳动,同时对服务器也造成一定的压力.所以很显然需要用到懒加载功能. 懒加载的概念,就是等到让图片出现在浏览器中的窗口的时候再去加载该图片资源.这样避免网页在同一时间加载过多资源出现的页面卡死. 牛刀小试 现有插件很多,我也直接拿来用了,推荐使用 jQuery 的 lazyload.js ,大致阐述一下它的用法. <!-- css --> <style> img.lazy { /* 设置宽高 */ } &

懒加载课堂笔记

http://www.jianshu.com/p/29edd52a8e03 懒加载课堂笔记 作者 饥人谷_李栋 关注 2015.12.30 14:28* 字数 1005 阅读 402评论 5喜欢 7赞赏 1 饥人谷_李栋 定义 图片懒加载 阶段实现 如何判断图片在可视范围 代码思路 封装 懒加载抽离 曝光去重 总结 一.定义 加载一个东西,不需要立刻加载,而是在需要的时候再加载任何东西都可以实现 异步加载 二.图片的懒加载 当滚动窗口,DOM元素出现在面前的时候,在加载(曝光加载) 阶段实现:

【转】ViewPager学习笔记(一)——懒加载

在项目中ViewPager和Fragment接口框架已经是处处可见,但是在使用中,我们肯定不希望用户在当前页面时就在前后页面的数据,加入数据量很大,而用户又不愿意左右滑动浏览,那么这时候ViewPager中本来充满善意的预加载就有点令人不爽了.我们能做的就是屏蔽掉ViewPager的预加载机制.虽然ViewPager中提供的有setOffscreenPageLimit()来控制其预加载的数目,但是当设置为0后我们发现其根本没效果,这个的最小值就是1,也就是你只能最少前后各预加载一页.那么,这时候

懒加载 字典转模型

>>>懒加载 一.介绍 懒加载又称延时加载,即在系统调用时加载,如果系统不调用则不会加载,所谓懒加载其实就是重写其get方法. 在使用懒加载时要先判断该方法是否存在,如果不存在再进行实例化. 二.优点 不必将创建对象的方法都写在viewDidLoad里面,代码可读性更强. 每个控件的getter方法分别负责各自的实例化处理,独立性强,耦合性低. 三.使用 声明一个属性,该属性既可以是私有属性也可以是在.h中声明的属性,懒加载的对象是一个属性. 在.m文件中的viewDidLoad外面重写

js可视区域图片懒加载

可视区域图片懒加载 实现原理,页面滚动时获取需要懒加载的图片,判断此图片是否在可视区域内,是则设置图片data-src地址为src地址,加载图片. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>jquery可视区域图片懒加载</title> <script src="http://libs.baidu.com/jquery/2

转 : Hibernate懒加载深入分析

懒加载可以提高性能吗? 不可以简单的说"能",因为hibernate的关系映射拖累了SQL的性能,所以想出懒加载来弥补.只是弥补而以,不会超越.所以大家不要想着使用了懒加载总体性能就提高了,其实总体性能不下降就万幸了.----------------------------------------------------------Hibernate的lazy属性可以配置在: (常用)<set><list>标签上 ,可以取值true,false,extra   

Hibernate一对一,一对多懒加载的要求

懒加载要求Domain对象不能是final的,因为Hibernate需要生成一个继承自该Domain对象的类来实现懒加载.懒加载主要有三种: 1. 对象的懒加载 2. 关联集合的懒加载 3. 对象属性的懒加载 对象的懒加载 对象的懒加载就是在映射文件的class标签中设置lazy属性为true,这时,如果用session.load方法获取这个对象的话,Hibernate只返回一个代理对象,而不是真的去查询数据库,等到真正用到这个对象的时候,Hibernate才会去查询数据库. 关联集合的懒加载

【转】实现ViewPager懒加载的三种方法

方法一 在Fragment可见时请求数据.此方案仍预加载了前后的页面,但是没有请求数据,只有进入到当前Framgent时才请求数据. 优点:实现了数据的懒加载缺点:一次仍是三个Framgment对象,不是完全意义的懒加载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class FragmentSample extends Fragment{ ....... @Override public void setUserVi

【java】itoo项目实战之hibernate 懒加载优化性能

在做itoo 3.0 的时候,考评系统想要上线,就开始导入数据了,只导入学生2万条数据,但是导入的速度特别的慢,这个慢的原因是因为导入的时候进行了过多的IO操作.但是导入成功之后,查询学生的速度更加慢,因为底层用了hibernate的hql语句进行查询的,学习过hibernate的人都知道,如果hibernate不设置懒加载的话,只有是有关联的数据都会一次性全部都查询出来,我试了试,查询2万条数据,最深的级联查询是有5层,然后发出来的语句是460条,时间大概是10s.然后就考虑使用lazy进行优