在iPhone中加载图像的最佳方式是什么?

时间:2011-02-18 10:20:07

标签: iphone uitableview lazy-loading

我想知道,延迟加载的最佳方法是什么。对我来说,大多数应用程序我使用解析并从服务器获取URL并将图像放入表视图。所以我实现了延迟加载以提高应用程序的性能。现在我想知道延迟加载图像的最佳方法。因为我在四种方式中使用了延迟加载,

  • 从Apple developer.com

  • 延迟加载图片
  • 实现了用于改善延迟加载的异步方法

  • 使用单独的主线程来处理下载的图像。

  • 使用ECOImageLoadingDemo应用程序进行延迟加载。

但我已经使用上述四种方法来实现延迟加载。但我想知道什么是延迟加载的最佳方法。对于表现明智和记忆明智哪一个最适合呢?

先谢谢。

此致

Pugal

2 个答案:

答案 0 :(得分:4)

根据我的经验,性能方面和内存方面的解决方案位于滑块的两端。您可以在这两者之间移动解决方案,但缺点是在性能方面具有最佳解决方案,通常意味着内存方式更差的解决方案,反之亦然。我希望我能够清楚地解释这一点:)

以下是我如何处理延迟加载图片的问题:

在我的应用程序中,我创建了一个名为 GlobalImageProvider 的实体。所有图像请求都通过此实体。这样我可以控制我用于下载的线程数量,并且我可以实现一个缓存系统(内存+本地磁盘),所有这些对应用程序完全透明并具有完全控制权。 通过控制缓存的大小,我可以控制应用程序的速度。性能方面,没有什么能比得上已在内存中创建UIImage。 在内存方面,您甚至可以选择禁用缓存。

更重要的是,我甚至可以在应用程序运行时动态更改线程数,具体取决于我拥有的网络质量。

要发出在线请求,我正在使用NSURLConnection但我计划切换到别的东西,因为我读过它泄漏了内存。


在视图和控制器方面,我有一个AsyncImageView,它只是UIImageView,知道如何使用GlobalImageProvider。它知道在加载时显示活动指示符,并且可以处理来自GlobalImageProvider的响应 如果您知道所需图片的网址,则只需在屏幕上添加AsyncImageView,然后向GlobalImageProvider发送请求AsyncImageView作为“处理程序”对于那个图像。

如果您不喜欢将数据与图像视图混合,可以在GlobalImageProvider和AsyncImageView之间添加ViewController。他得到图像响应并将其放入ImageView。

就是这样,希望它对你有所帮助。

答案 1 :(得分:1)

您可以在 Bonus:KVO for Cell Images

部分查看Peepcode中的这篇优秀教程

http://peepcode.com/products/iphone-view-controllers-part-ii