【问题标题】:Where to cache remote image files in iOS?iOS 在哪里缓存远程图像文件?
【发布时间】:2011-05-12 09:19:10
【问题描述】:

我打算缓存来自服务器的图像并将其用作我的应用程序中的排序幻灯片放映。我将异步加载图像。

我有两个选择:

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

哪个更好?

如果您对缓存图像有任何建议,请告诉我。

【问题讨论】:

    标签: iphone ios ipad uiimage image-caching


    【解决方案1】:

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

    1. 如果图像过多,您的应用程序将收到内存不足警告,并且无论如何您都必须从内存中处理图像
    2. 在应用程序退出时将所有图像保存到文件中也不是一个好主意 - 不能保证您的保存代码将在应用程序退出时完成(例如,如果花费的时间太长,系统可能会终止您的应用程序并且您的图像将被丢失)

    我建议您在下载图像后立即将它们保存到文件中,并在内存中保留合理数量的图像,您需要在没有明显延迟的情况下显示(在需要时加载额外的图像并处理不必要的图像)

    【讨论】:

      【解决方案2】:

      我会推荐你​​第一个选项。为您提供更大的灵活性,例如当数据大小增加内存大小时。

      【讨论】:

        【解决方案3】:

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

        至于将文件写入的位置:您可以使用NSTemporaryDirectory() 或在NSLibraryDirectory 中创建一个目录(使用NSSearchPathForDirectoriesInDomains 来定位它)。后者具有将在 iTunes 备份中的优点/缺点(这是否是优点取决于用例)。使用 Library 目录是 Apple 推荐的存储已备份但未出现在 iTune 的文件交换对象(Documents 目录)中的数据的方式。

        【讨论】:

        • 感谢 Darkdust 的逻辑。
        【解决方案4】:

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

        它非常适合通过 http 拉取图片,您可以在此处的 EGO 开发者网站上找到它

        http://developers.enormego.com/

        【讨论】:

        • 似乎是一个不错的选择...你在使用这个时会收到内存警告吗?
        • 一点也不 - 不超过正常 ;-) Snippet follws ~~~~ imageView = [[EGOImageView alloc] initWithPlaceholderImage:[UIImage imageNamed:@"Placeholder.jpg"]]; imageView.frame = CGRectMake(4.0f, 4.0f, 36.0f, 36.0f); [self.contentView addSubview:imageView]; imageView.imageURL = [NSURL URLWithString:@"some.real.url/withanimage.png"];
        • 谢谢 Damo..我正在使用这个库。
        【解决方案5】:

        对于 iOS 平台上的图像缓存解决方案,您可能需要考虑 SDWebImage 框架,该框架位于:https://github.com/rs/SDWebImage。它很容易集成并解决您所有的图像缓存问题。:在此处阅读有关工作的更多信息:https://github.com/rs/SDWebImage#readme

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

        【讨论】:

          猜你喜欢
          • 2014-12-17
          • 2016-04-07
          • 2013-03-02
          • 2019-09-26
          • 1970-01-01
          • 2020-04-01
          • 1970-01-01
          • 2014-03-30
          相关资源
          最近更新 更多