NSCache 和持久性?

NSCache and persistence?

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

我想缓存图像以避免在使用相同参数进行搜索时下载相同的图像。我一直在阅读关于 NSCache 的一个很好的选择,例如在 this article, but I also read hereNSCache 不会在应用程序启动之间持续存在。不过,我在 Apple 的文档中找不到该信息,有人可以帮我找到吗?

如果我想在应用程序启动之间保留下载的图像,而我无法使用 NSCache 做到这一点,那么我应该如何管理它?

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

我也遇到了同样的问题。我创建了一个轻量级库。它将数据存储在 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