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