在UITableViewCell中延迟加载图像

我有我的UITableView 50个自定义单元格。 我想显示一个图像和一个标签在单元格中,我从URL获取图像。

我想做一个懒惰的图像加载,以便在加载图像时UI不会冻结。 我试图在单独的线程获取图像,但我必须加载每个图像,每次细胞变得可见(否则重用单元格显示旧图像)

像Facebook这样的应用程序只能为当前可见的单元格加载图像,一旦加载图像,就不会再次加载图像。 有人可以告诉我如何复制这种行为。

谢谢。

编辑
尝试将图像caching在NSMutableDictionary对象中会在用户快速滚动时产生问题。 只有在滚动完全停止并清除caching内存警告时,我才能获取图像。 但是,应用程序总是会得到一个内存警告(由于caching图像的大小),并在重新加载前清除caching。 如果滚动速度非常快,就会崩溃。

欢迎任何其他build议

将图像加载到后台线程仍然是一个好主意。 如果你不想每次重新加载它们,我build议设置一个NSMutableDictionary并将图像存储在那里。 您可以使用一些唯一的标识符,如行ID甚至图像的名称作为每个图像的关键。

当加载一个单元格时,你会发送一个objectForKey:消息到NSMutableDictionary来检索该特定单元格的图像(根据你的唯一键)。 如果它返回零,这意味着图像从caching中丢失,你需要你的背景图像加载线程去检索它。 否则,您将返回适合您的表格单元格显示的图像。 在内存警告中,您可以清除这个caching中的图像,而不会产生不利影响(除了迫使它们在需要时重新加载)。

我刚刚成功地解决了相同的问题,通过使用自定义的NSOperation加载排队方式的图像,并将其存储到静态NSMutableDictionary作为caching。 以下是我用来解决问题的代码的基础的链接。

为UITableViewCell加载远程图像

最好阅读论坛中的所有主题,以帮助您了解实际发生的情况。

lostInTransit,

我有一个类似的问题,并在探索许多不同的可能的解决scheme,我发现这篇博客文章:

davidgolightly.blogspot.com/2009/02/asynchronous-image-caching-with-iphone.html

我还build议你从苹果开发者网站下载URLCache示例:

developer.apple.com/iphone/prerelease/library/samplecode/URLCache /

这里是另一个问题的post:

http://www.markj.net/iphone-asynchronous-table-image/

我也很想分享你的发现。

对于那些有兴趣和懒惰的人,我想build议一个开源(MIT许可证)的UIImageView图像的caching/cachingnetworking的实现: SDWebImage

延迟加载就像同步types的请求。意味着等待响应

自我形象button是解决scheme..

自我形象button是asynchronoustypes的请求..不要等待响应..只是显示数据在一次….

你可以从github下载文件夹….

添加到您的项目…

在图像视图中,将类更改为自我图像button…

把它的对象在m文件中…

您可以使用…..

UITableView与图像caching和resize/在后台线程设置:

http://blog.slaunchaman.com/2011/08/12/gcd-example-updated-now-with-more-speed/

这是关于NSOperation的示例教程 ,展示如何在UITableViewCell中延迟加载图像