在 iPhone 中延迟加载图像的最佳方式是啥?
Posted
技术标签:
【中文标题】在 iPhone 中延迟加载图像的最佳方式是啥?【英文标题】:What's the Best way for Lazy loading images in iPhone?在 iPhone 中延迟加载图像的最佳方式是什么? 【发布时间】:2011-02-18 10:20:07 【问题描述】:我想知道,延迟加载的最佳方式是什么。对我来说,我使用的大多数应用程序都使用解析并从服务器获取 url 并将图像放入表视图中。所以我实现了延迟加载来提高应用程序的性能。现在我想知道延迟加载图像的最佳方法。因为我已经用懒加载进了四种方式,
从 Apple developer.com 延迟加载图片
实现了异步方法来改善延迟加载
使用单独的主线程来处理下载的图像。
已使用 ECOImageLoadingDemo 应用程序进行延迟加载。
但是我已经使用了以上四种方法来实现延迟加载。但我想知道延迟加载的最佳方法是什么。哪一个最适合性能和内存?
提前致谢。
问候,
普格尔
【问题讨论】:
【参考方案1】:根据我的经验,性能方面和内存方面的解决方案位于滑块的两端。您可以在这两者之间的某个地方使用您的解决方案,但缺点是在性能方面拥有最佳解决方案通常意味着在内存方面更差的解决方案,反之亦然。我希望我解释得足够清楚:)
这是我处理延迟加载图像问题的方法:
在我的应用程序中,我创建了一个名为 GlobalImageProvider 的实体。所有图像请求都通过此实体。通过这种方式,我可以控制用于下载的线程数,并且可以实现缓存系统(内存 + 本地磁盘),所有这些对应用程序完全透明并且可以完全控制。
通过控制缓存的大小,我可以控制应用程序的速度。性能方面,没有什么能比得上在内存中创建的UIImage
。
在内存方面,您甚至可以选择禁用缓存。
更重要的是,我什至可以在应用程序运行时根据我拥有的网络质量动态更改线程数。
为了提出在线请求,我使用的是NSURLConnection
,但我计划切换到其他东西,因为我读到它会泄漏内存。
在视图和控制器方面,我有一个AsyncImageView
,它只是一个知道如何使用GlobalImageProvider
的UIImageView
。它知道在加载时显示活动指示器,并且可以处理来自GlobalImageProvider
的响应。
如果您知道所需图像的 URL,您需要做的就是在屏幕上添加一个AsyncImageView
并向GlobalImageProvider
发出请求,并将AsyncImageView
作为该图像的“处理程序”。
如果您不喜欢将数据与图像视图混合,您可以在 GlobalImageProvider 和 AsyncImageView 之间添加一个 ViewController。他获取图像响应并将其放入 ImageView。
就是这样,希望对你有一点帮助。
【讨论】:
【参考方案2】:您可以在 Bonus: KVO for Cell Images
部分查看来自 Peepcode 的优秀教程http://peepcode.com/products/iphone-view-controllers-part-ii
【讨论】:
以上是关于在 iPhone 中延迟加载图像的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章