繁体   English   中英

在UITableViewCell中加载延迟图像

[英]Lazy load images in UITableViewCell

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

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

Facebook等应用仅为当前可见的单元格加载图像,一旦加载图像,它们就不会再次加载。 有人可以告诉我如何复制此行为。

谢谢。


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

欢迎任何其他建议

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

加载单元格时,您将向NSMutableDictionary发送一个objectForKey:消息,以检索该特定单元格的图像(基于您的唯一键)。 如果它返回nil,则表示缓存中缺少图像,您需要使用背景图像加载线程来检索它。 否则,您将返回要显示的表格单元格的相应图像。 在内存警告上,您可以清除此图像缓存而不会产生任何不利影响(除了强制它们按需重新加载)。

我通过使用自定义NSOperation在排队时加载图像并将它们作为缓存存储到静态NSMutableDictionary中,成功解决了同样的问题。 下面是我用来解决问题的代码基础的链接。

为UITableViewCell加载远程图像

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

lostInTransit,

我遇到了类似的问题,在探索许多不同的可能解决方案时,我发现了这篇博文:

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

我还建议您从Apple开发者网站下载URLCache示例:

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

这是关于这个问题的另一篇文章:

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

我也很乐意与你分享你的发现。

延迟加载就像同步类型请求..意味着等待响应

自我形象按钮是解决方案..

自我图像按钮是异步类型请求..不要等待响应..一次只显示数据....

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

添加到您的项目......

在xib ..at图像视图中,将类更改为自我图像按钮...

在m文件中创建它的对象...

您可以使用.....

对于那些有兴趣并且像我一样懒惰的人,我想建议一个UIImageView图像的懒惰/缓存网络的开源(MIT许可证)实现: SDWebImage

UITableView带有图像缓存和后台线程中的大小调整/设置:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM