首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存下载的图像: FileManager / CachePolicy / URLCache / NSCache?

缓存下载的图像: FileManager / CachePolicy / URLCache / NSCache?
EN

Stack Overflow用户
提问于 2017-09-25 14:53:58
回答 1查看 565关注 0票数 0

我需要实现具有N个单元格的表视图的常见场景,其中每个单元格都需要下载要在其中显示的图像。

要下载映像的服务协议可以是HTTP或HTTPS。

我是这样使用URLSessionDownloadTask的:

代码语言:javascript
复制
func downloadImage(urlStr: String, completion: @escaping (UIImage?, Error?) -> Void) {
    let url = URL(string: urlStr)
    let request = URLRequest(url: url!)
    let task = session.downloadTask(with: request, completionHandler: {
        (fileUrl, response, error) in
        // Call 'completion' depending on result
    })

    task.resume()
}

其中session是一个具有默认配置和关联操作队列的URLSession

代码语言:javascript
复制
self.session = URLSession(configuration: configuration, delegate: nil, delegateQueue: self.operationQueue)

所以,我想要的是避免下载已经下载的图片。我希望他们有一些过期的时间。

我读过一些文章和帖子,也不完全清楚我发现的选项之间的区别:

A.使用FileManager将图像实际存储为文件,并在检查过期时间后将其删除。

B.设置URLRequestcachePolicy属性。

C.使用URLCache

D.使用NSCache

关于A:

  1. 将图像存储为文件与使用缓存实际上有什么区别?文件存储能提供缓存所没有的任何好处吗?这些图片与用户无关,我可以在需要时从服务器下载它们.

关于B:

  1. 我读过苹果的文档关于这一点的文章,但我不完全理解对于我的场景,我是否应该使用NSURLRequestUseProtocolCachePolicy
  2. 这个选项实际上是如何工作的?制定政策就足够了,然后你就不用再关心其他事情了?现在请求下载图像的URLRequest是如何下载和缓存的?

关于C:

  1. 它应该如何正确地实现?如果这是最好的方法,有人能给我提供一个例子/教程吗?到期日呢?

关于D:

  1. 我找到了一个我能理解的例子,但是有了前面的选项,这是否是一个好的方法呢?到期日也在这里呢?

概括地说:哪一种选择最适合我的方案,为什么?

EN

回答 1

Stack Overflow用户

发布于 2017-09-26 13:49:16

根据我对您的问题的推断,“我想要的是避免下载已经下载的图像,我希望它们有一些过期时间。”

为了避免再次下载图像,您可以实现以下用例,在其中使用图像本身的urls将图像存储在NSCache中。

这将类似于链接中讨论的内容。

对于过期时间情况,如果要在特定的过期时间删除所有图像,则只需检查该场景并清空缓存即可。

对于要删除单个图像的情况,根据其过期时间,您可以检查服务器的响应是否过期,如果超出限制,则再次删除缓存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46408233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档