如何有效地将图像从服务器加载到tableView?

问题描述:

我有一个表格视图,所有单元格都有UITableViewCellStyleSubtitle, 所有单元格的图像都是从服务器获取的。如何有效地将图像从服务器加载到tableView?

但是,这些图像不会经常更改。

有人可以告诉我如何改善用户体验吗?用户每次向下滚动表格,似乎它都会在线检查并再次下载图像。

或者至少给我看一些可用于实现目标的选项。

感谢,

Three20库有一个ImageView子类,它接受一个URL到你的远程图像,并使用优秀的TTURLRequest/Caching机制来获取图像。它维护一个内存中和磁盘缓存,只会下载图片,如果它们没有被缓存或过期。您可以配置默认缓存到期时间或使用HTTP响应中的值。如果您使用TTTableViewController子类和相应的TTTableItem子类,则将免费获得适当的图像下载行为。但是,没有必要使用每三个组件来执行所需的操作。如果您要集成到现有代码中,则可以创建自己的使用TTImageView而不是标准UIImageView的UITableViewCell子类。然后,在你的单元格配置方法中,你可以设置一个默认的占位符图像和一个URL来加载,并且几乎可以处理其余的部分。作为性能优化,您还应该在tableview控制器中实现UIScrollView委托方法,以在滚动过程中暂停TTURLRequestQueue(查看TTTableViewController以了解如何完成此操作)。

+0

谢谢布赖恩,我很快就要对three20进行调查。这听起来很有趣,但我还没有看到太多的文档;)无论如何,谢谢。 – 2010-01-28 10:56:04

+0

文档的方式并不多,但TTURLRequestQueue和TTURLCache的代码非常清晰。 – 2010-01-29 23:01:31

你可以尝试以下

  • 一个创建一个字典,并使用图像名称为重点

  • 缓存和重用缓存所有获取的图像在它整个UITableView单元格tableView:cellForRowAtIndexPath:

  • 如果它只是一个图像重复加载一个外部tableView:cellForRowAtIndexPath:

  • 你写的图像每月都会改变 - 你可以保存图像到磁盘,因为它们被用来检查图像是否在后台刻录机上或在给定的日常间隔中更改重新下载图像。 Brian Chapados的回复看起来很有趣。

根据您的代码可能有很多其他方式来改善图像加载。希望有所帮助...

+0

嗨尼尔斯,也许我还没有被清除在我的问题中,我的意思是图像可能会改变一个月或三个月,但用户每天使用我的应用程序。 – 2010-01-26 21:43:23