4

无论使用什么方法:iOS 5 的[NSURLConnection sendAsynchronousRequest],SDWebImageASIHTTPRequest, 如果在下载图像时,单元格 aleady 出列(dequeueReusableCellWithIdentifier调用时),因此,新标签现在可能被标记为“Mary”,而 Peter 的正在下载图像,下载完成后,Peter 的图像将填充到 Mary 的框中。

如果之后玛丽的图像也被下载并进入玛丽的牢房并掩盖彼得的照片会更好,但如果

1) Mary 的照片需要 1 或 2 秒才能下载(手机无线网络慢或延迟),还是此时网络阻塞?然后 Peter 的照片将在 Mary 的名字旁边显示 1 或 2 秒或 20 秒,如果这次网络请求失败,甚至永远显示。

2)如果玛丽的数据有“不显示我的照片”标志之类的隐私设置,那将是最糟糕的,那么cellForRowAtIndexPath可能实际上在玛丽的中设置了一个虚拟图像(虚拟头像)imageView,并且当彼得的图像被下载时,进入玛丽的细胞,永远不会被替换。

这可以优雅地处理或解决吗?

顺便说一句,如果我们使用SDWebImageor ASIHTTPRequest,问题会在那里还是已经由班级处理?

4

1 回答 1

2

UITableViewCell方法-prepareForReuse是取消未完成的网络请求、丢弃不需要的缓存以及诸如此类的好机会。

+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]不直接提供取消请求的方法,但是如果您在开始请求之前设置一些属性或 ivar,然后检查完​​成处理程序以确保其当前值与您期望的匹配,您可以获得类似的影响。

于 2012-09-05T03:55:20.277 回答