无论使用何种方法:iOS 5的[NSURLConnection sendAsynchronousRequest],SDWeb
Image或ASIHTTPRequest,如果在下载图像时,单元格已经出列(当调用dequeueReusableCellWithIdentifier时),因此,现在可以标记新标签作为“玛丽”,正在下载彼得的图像,当下载完成时,彼得的图像被填充到玛丽的盒子里.
如果玛丽的形象也被随后下载并将进入玛丽的牢房并掩盖彼得的照片会更好,但如果
1)玛丽的照片需要1或2秒才能下载(手机无线网络速度慢或延迟),或网络只是在那时窒息?然后,彼得的照片将在玛丽名称旁边显示1或2秒或20秒,如果此次网络请求失败,则甚至永远显示.
2)如果Mary的数据隐私设置为“不显示我的照片”标志或其他内容,那么将是最糟糕的,那么cellForRowAtIndexPath可能实际上将虚拟图像(虚拟化身)设置为Mary的imageView,当下载Peter的图像时,去进入玛丽的牢房,永远不会被取代.
这可以优雅地处理或解决吗?
顺便说一句,如果我们使用SDWebImage或ASIHTTPRequest,那么问题是否已经存在或将由该类处理?
最佳答案
UITableViewCell
method -prepareForReuse
是一个很好的机会,可以取消优秀的网络请求,丢弃不需要的缓存,以及那种东西.
[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]不直接提供取消请求的方法,但如果在开始请求之前设置了某个属性或ivar,然后检查完成处理程序以确保其当前值匹配你所期望的,你可以得到类似的效果.