我想知道,延迟加载的最佳方法是什么。对我来说,大多数应用程序我使用解析并从服务器获取URL并将图像放入表视图。所以我实现了延迟加载以提高应用程序的性能。现在我想知道延迟加载图像的最佳方法。因为我在四种方式中使用了延迟加载,
从Apple developer.com
实现了用于改善延迟加载的异步方法
使用单独的主线程来处理下载的图像。
使用ECOImageLoadingDemo应用程序进行延迟加载。
但我已经使用上述四种方法来实现延迟加载。但我想知道什么是延迟加载的最佳方法。对于表现明智和记忆明智哪一个最适合呢?
先谢谢。
此致
Pugal
答案 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