iOS开发UITableView中ImageView图片的延迟加载思路

先说我们做这个是能解决啥问题  能干啥

有时候,我们会遇到这种情况:
当界面中含有UITableView,而且每个UITableViewCell里边都有图片。这时候当我们滚动UITableView的时候,如果有一堆的图片需要显示,那么可能会出现卡顿的现象。


两种思路

第一种  用UIScrollView的代理方法实现

第二种  用RunLoop在UIScrollView滑动时和App默认运行时的运行模式不同来实现


先说第一种

UIScrollView有两个代理方法

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;      // called when scroll view grinds to a halt

这两方法一个是停止拖拽时调用   一个是当滚动视图嘎然而止 时调用    在这两方法里面写给ImageView加载图片的方法   就能避免因为加载图片导致UITableView滚动时卡顿的问题

代码:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    //如果tableview停止滚动,开始加载图像
    if (!decelerate) {
        [self loadImagesForOnscreenRows];
    }
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    //如果tableview停止滚动,开始加载图像
    [self loadImagesForOnscreenRows];
}

第二种

利用PerformSelector设置当前线程的RunLoop的运行模式

kCFRunLoopDefaultMode:App的默认运行模式,通常主线程是在这个运行模式下运行

UITrackingRunLoopMode:跟踪用户交互事件(用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他Mode影响)

然后 我们滑动UITableView时候 RunLoop的运行模式就会变为UITrackingRunLoopMode   

所以我们把给ImageView加载图片的方法用PerformSelector设置当前线程的RunLoop的运行模式kCFRunLoopDefaultMode  这样滑动时候就不会执行加载图片的方法了

也就能避免因为加载图片导致UITableView滚动时卡顿的问题

代码

    [cell performSelector:@selector(setImage) withObject:nil afterDelay:0 inModes:@[NSDefaultRunLoopMode]];


打完收工   哈哈哈



  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值