在项目中,我们会进行异步的网络下载图片把它加载UITableViewCell中上,一般情况下在我们会在cellForRow方法里面设置cell的图片数据源(异步进行网络下载图片),也就是说如果一个cell的UIImageview对象开启了一个下载任务,这个时候该cell对象发生了重用(reuse),新的image数据源会开启另外的一个下载任务,由于他们关联的UIImageview对象实际上是同一个cell实例的UIImageview对象,就会发生2个下载任务回调给同一个UIImageview对象。这个时候就有必要做一些处理,避免回调发生时,错误的image数据源刷新了UI。
还有一点,就是当我们在使用SDWebImage为Cell下载图片的时候,每一个Cell(单独的对象)持有一个SDWebImage,而每一个的SDWebImage的最大并发数都是6,假设你现在有10页数据,每一页有10条,每一条有6张图片,那你快速滑到第10页,难道是有100*6这么多线程去并发下载吗?
所以在我们向下滑动UITableview的时候我们需要手动去取消(cancel)掉下载操作,当用户停止滑动,再去执行下载操作。
具体思路如下:我们可以利用cell的重用机制,当cell被重用了,取消下载。
//当前已经被分配的cell如果被重用了(通常是滚动出屏幕外了)- (void)prepareForReuse { [super prepareForReuse]; //在下面写取消下载的操作。 [self.XXXImageView sd_cancelCurrentImageLoad];//如果用了SDWebImageDownloaderOperation,就取消这个SDWebImageDownloaderOperation。}复制代码