【问题标题】:NSCache and persistence?NSCache 和持久化?
【发布时间】:2018-07-23 09:14:26
【问题描述】:

我的应用程序会搜索一些项目,并根据获得的每个结果下载一张图片。它在 tableView 上显示结果,每个结果一个单元格,每个单元格显示相应的图像。

如果已经使用相同的参数进行了搜索,我想缓存图像以避免下载相同的图像。我一直在阅读关于 NSCache 作为一个不错的选择,例如在 this article 中,但我也阅读了 here NSCache 在应用程序启动之间不会持续存在。我在 Apple 的文档中找不到该信息,有人可以帮我找到吗?

如果我想在应用启动之间保留下载的图像,但我无法使用 NSCache 执行此操作,那么我应该如何管理呢?

【问题讨论】:

  • 将图像写入沙箱的 Caches 文件夹。

标签: ios swift caching persistence nscache


【解决方案1】:

缓存是一项依赖于应用程序的任务。例如,正如您所说, d 不能使用 NPCache,因为它不会永久存储。您可以尝试调整您的 HTTP 服务器(!),以便您的应用程序的 URL 加载系统将尽可能长时间地缓存下载的图像。但是很难实现缓存完全符合您的要求。第三种选择是使用为您进行缓存的免费框架。即使我认为它们有一些缺陷,你也应该看看它们。第四种选择是,编写自己的缓存来完全满足您的需求。这并不像听起来那么复杂。正如@rmaddy 建议的那样,它本质上是在缓存文件夹中读取和写入图像。

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题。我创建了一个轻量级库。它将数据存储在 NSCache 中并将其与缓存文件夹同步。因此,您的数据在您的应用启动之间可用。

    用法:
    class MyClass {
    
        private let cache: SmartCache<URL, Data> = .init()
    
        func downloadImage(from url: URL) {
            if let data = self.cache[url], let image = NSImage(data: data) {
                // Here your `image`
            } else {
                // Download your image and save it to our cache
                cache[url] = image.tiffRepresentation
            }
        }
    }
    

    https://github.com/nightwill/smart-cache.git

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多