【发布时间】:2011-05-12 09:19:10
【问题描述】:
我打算缓存来自服务器的图像并将其用作我的应用程序中的排序幻灯片放映。我将异步加载图像。
我有两个选择:
- 将图像缓存为文件并在必要时使用它。
- 在内存中缓存图像对象,并在必要时使用它,并在应用程序退出时将其写入文件。
哪个更好?
如果您对缓存图像有任何建议,请告诉我。
【问题讨论】:
标签: iphone ios ipad uiimage image-caching
我打算缓存来自服务器的图像并将其用作我的应用程序中的排序幻灯片放映。我将异步加载图像。
我有两个选择:
哪个更好?
如果您对缓存图像有任何建议,请告诉我。
【问题讨论】:
标签: iphone ios ipad uiimage image-caching
您的第二种方法有两个主要缺陷:
我建议您在下载图像后立即将它们保存到文件中,并在内存中保留合理数量的图像,您需要在没有明显延迟的情况下显示(在需要时加载额外的图像并处理不必要的图像)
【讨论】:
我会推荐你第一个选项。为您提供更大的灵活性,例如当数据大小增加内存大小时。
【讨论】:
我会这样做:拥有一个带有缓存图像(作为 UIImage 对象)的 NSMutableDictionary。如果图像不在缓存中,请查看它是否可以作为文件使用。如果它不能作为文件使用,请加载它,将其放入字典中,然后将其写入文件。
至于将文件写入的位置:您可以使用NSTemporaryDirectory() 或在NSLibraryDirectory 中创建一个目录(使用NSSearchPathForDirectoriesInDomains 来定位它)。后者具有将在 iTunes 备份中的优点/缺点(这是否是优点取决于用例)。使用 Library 目录是 Apple 推荐的存储已备份但未出现在 iTune 的文件交换对象(Documents 目录)中的数据的方式。
【讨论】:
我已经开始使用 EGOImageView 来处理我的缓存;它用途广泛,可以为您处理复杂的缓存。
它非常适合通过 http 拉取图片,您可以在此处的 EGO 开发者网站上找到它
【讨论】:
对于 iOS 平台上的图像缓存解决方案,您可能需要考虑 SDWebImage 框架,该框架位于:https://github.com/rs/SDWebImage。它很容易集成并解决您所有的图像缓存问题。:在此处阅读有关工作的更多信息:https://github.com/rs/SDWebImage#readme
我们最近为我们的应用选择了这个,效果很好。
【讨论】: