我需要实现具有N个单元格的表视图的常见场景,其中每个单元格需要下载要在其中显示的图像。
调用以下载图像的服务协议可以是HTTP或HTTPS。
我这样使用URLSessionDownloadTask
:
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
:
self.session = URLSession(configuration: configuration, delegate: nil, delegateQueue: self.operationQueue)
所以,我想要的是避免下载已经下载的图像。我希望他们有一些到期时间。
我已经阅读了一些文章和帖子,我并不完全清楚我发现的选项之间的差异:
A. 使用FileManager
将图像实际存储为文件,并在检查到期时间后将其删除。
B。设置cachePolicy
的{{1}}属性。
C。使用URLRequest
D。使用URLCache
关于A:
关于B:
NSCache
。NSURLRequestUseProtocolCachePolicy
如何?关于C:
关于D:
总结:哪种选项对我的方案最有效和最合适,为什么?
答案 0 :(得分:0)
根据我推断的问题“我想要的是避免下载已下载的图片。我希望他们有一些到期时间。”
为避免再次下载图像,您可以实现以下用例,使用图像本身的URL将图像存储在NSCache中。
这就像link中讨论的那样。
对于到期时间情况,如果要在特定到期时间删除所有图像,则只需检查该方案并清空缓存。
对于您希望删除单个图像的情况,根据其过期时间,您可以检查服务器对过期密钥的响应,并在限制为止时再次删除缓存被破坏了。