【发布时间】:2017-09-25 14:53:58
【问题描述】:
我需要实现具有 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. 设置URLRequest 的cachePolicy 属性。
C. 使用URLCache
D.使用NSCache
关于A:
- 将图像存储为文件和使用缓存之间实际上有什么区别?文件存储能否提供缓存所没有的任何好处?这些图片与用户无关,我可以在需要时从服务器下载它们。
关于乙:
- 我阅读了 Apple's documentation 的相关信息,但我不完全了解在我的场景中是否应该使用
NSURLRequestUseProtocolCachePolicy。 - 这个选项实际上是如何工作的?设置策略就足够了,然后您不必关心其他任何事情?现在要求下载图片的
URLRequest如何已经下载并缓存了?
关于C:
- 应该如何正确实施?如果这是最好的方法,有人可以给我一个例子/教程吗?有效期呢?
关于 D:
- 我找到了一个我理解的示例,但是使用以前的选项会是一个好方法吗?到期日期也在这里?
总而言之:哪个选项对我的场景最有效和最合适,为什么?
【问题讨论】:
标签: ios nsurlsession nsurlrequest nsurlcache nscache