TableView加载图片的优化逻辑

作者: 老司机Wicky | 来源:发表于2016-04-16 21:51 被阅读4076次

系列文章:


日常中,最常使用的空间非UITableView莫属了。
但是当TableView的cell中包含图片时,使用SDWebImage加载图片虽然是异步过程,但是仍然十分占用系统资源。
那么我们就要想一个办法去优化加载图片的逻辑。

此处,我只讲我自己的想法,或许也有更好的逻辑,还希望在下面留言指点我一下。

我的想法是TableView滚动的时候不去加载未加载过的图片,停止滚动后再从网络加载。已经加载过得图片,无论什么时候都加载该图片(因为SDWebImage会将加载过得图片缓存下来,再次加载的时候从缓存中取,这样就不用开辟线程下载图片了)。

啊.png 屏幕快照 2016-04-16 下午9.34.14.png

如上,就是我对TableView加载图片的优化逻辑。
转载标注
http://www.jianshu.com/p/328e503900d0

相关文章

网友评论

  • coolLee:不知楼主有没有玩过Runloop,利用runloop有更简便的实现方式
    老司机Wicky:@coolLee 那个思路的痛点在于怎么确定数组个数的上限,我还没有找到通用解决方法。( ̄~ ̄)
    coolLee:@老司机Wicky 嗯,把图片加载放在defaultMode的runloop里,确实简化不少
    老司机Wicky:@coolLee 放runloop闲时加载那个吧,了解过那个思路
  • PGOne爱吃饺子:不给你点波关注,都对不起这个好的思路
  • 潸何吊:老司机 self.arrDLed 这个数组存的什么 :yum:
    潸何吊:@老司机Wicky :grin: 谢谢
    老司机Wicky:@潸何吊 已经下载过的indexPath
  • hhuua:例如IM类的APP中,显示图片的Cell,宽高要和图片宽高成比例,在图片下载完成之前获取不到图片的size,下载完成之后要刷新cell,这类的需求可以怎么优化吗?
    老司机Wicky:@hhuua 考虑代码解耦的话可以放在cell中吧
    hhuua:@老司机Wicky 嗯嗯,好的。那如果是加载图片的话,是cell自己去加载好还是在controller里加载然后去刷新cell好呢?

    老司机Wicky:@hhuua 这种情况其实一般考虑事先获取到尺寸。比如收到的是一条图片信息,可以考虑让服务器把url发过来的时候把尺寸带过来。第二种思路是先通过设置请求头的contentlength来请求文件头,也可以获取到图片尺寸。
  • Fooler:老司机,这个问题就在我去年,大概也就是5月份左右,面试的时候被提到过,当时被问懵了。。还是问了面试官才知道可以这么做
  • niuxinghua:想问下 滑动的时候 图片下载解决了,但是reload的时候 图片解码这个是sd解决的吗
    老司机Wicky:@niuxinghua 虽然我不太明白你问得是什么意思:flushed:不过sd内部的确有图片解码类,而且为了加快图片的加载速度,解码和缓存过程都由sd内部完成
  • 2537524b7b0f:有问题。 确实让tableview滑动顺畅了很多,但部分可见cell 图片在 网络加载成功前 会展示错误(不对应的)图片。
    2537524b7b0f:@老司机Wicky 这两天干项目,没关注回复!
    老司机Wicky:@MKin 我细想了一下,是这样的。当我开始下载的时候,开启异步线程去加载图片,然后滑动tableview之后下载任务还在继续,当现在完成时,就给那个cell的imgV附图片。然而虽然这个cell已经滚动出屏幕,但是由于复用,他会被添加在另一个cell上。不知道这么说你能听懂么。。因为说的比较没有逻辑。早期SD就会存在这个问题,不过后来他给这个问题解决了。我参照他的源码做了如下修改:
    -(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    {
    [[UIImageView new] sd_cancelCurrentImageLoad];
    }

    滚动时取消任务就好了
    老司机Wicky:@MKin 复用的问题,可重写prepareforuse方法
  • xiao小马哥:这个好像有问题啊,如果我刷新数据的话,之前存的图片不就没用了么?(因为你是按照索引去存的,存好的图片对应的cell下次的索引变了)
    Crowdasola:@xiao小马哥 没有存图片吧,只是存了索引
    老司机Wicky:@Carry超仔 存的图片?什么意思
  • bigParis:有demo吗?可以对比下和不加限制时候的帧率吗?
    老司机Wicky:@bigParis 时间太久,demo没了,有兴趣你阔以敲一下
  • e17839d42eb6:这个很好啊,之前从来没这么想过,看到楼主的思路,顿觉有道理:grin:

本文标题:TableView加载图片的优化逻辑

本文链接:https://www.haomeiwen.com/subject/rgkolttx.html