在iOS中缓存远程图像文件的位置?

时间:2011-05-12 09:19:11

标签: iphone ios ipad uiimage image-caching

我打算从服务器缓存图像,并在我的应用程序中将其显示为排序幻灯片。我将异步加载图像。

我有两个选择:

  1. 将图像缓存为文件,并在必要时使用它。
  2. 将图像对象缓存在内存中,并在必要时使用它,并在应用程序退出时将其写入文件。
  3. 哪一个更好?

    如果您对缓存图片有任何建议,请与我们联系。

5 个答案:

答案 0 :(得分:8)

你的第二种方法有两个主要缺陷:

  1. 如果图像太多,那么您的应用程序将获得低内存警告,无论如何您都必须从内存中处理图像
  2. 在应用程序退出时将所有图像保存到文件也不是一个好主意 - 不能保证您的保存代码将在应用程序退出时完成(例如,如果它需要太长时间系统可能会终止您的应用程序,您的图像将是丢失)
  3. 我建议您在下载文件后立即将图像保存到文件中,并在内存中保存合理数量的图像,无需显示延迟(在需要时加载额外图像并处理不必要的图像)

答案 1 :(得分:4)

我会推荐你​​第一个选择。让您更具灵活性,例如:当数据大小增加内存大小时。

答案 2 :(得分:4)

我这样做:拥有一个带有缓存图像的NSMutableDictionary(作为UIImage对象)。如果图像不在缓存中,请查看它是否可用作文件。如果它不能作为文件使用,请加载它,将其放入字典中并将其写入文件。

至于将文件写入的 :您可以使用NSTemporaryDirectory()或在NSLibraryDirectory内创建一个目录(使用NSSearchPathForDirectoriesInDomains找到它)。后者的优点/缺点是它将在iTunes备份中(无论这是否优势取决于用例)。使用Library目录是Apple推荐的备份数据的方式,但不会出现在iTune的文件交换中(Documents目录)。

答案 3 :(得分:2)

我已经开始使用EGOImageView来处理我的缓存;它非常通用,可以为您处理复杂的缓存。

它非常适合通过http提取图像,你可以在EGO开发者网站上找到它

http://developers.enormego.com/

答案 4 :(得分:2)

对于iOS平台上的图像缓存解决方案,您可能需要考虑以下网址提供的SDWebImage框架:https://github.com/rs/SDWebImage。它很容易集成并处理您所有的图像缓存担忧:详细了解在此工作:https://github.com/rs/SDWebImage#readme

我们最近为我们的应用选择了它,效果很好。