我需要实现具有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:
关于B:
NSURLRequestUseProtocolCachePolicy。URLRequest是如何下载和缓存的?关于C:
关于D:
概括地说:哪一种选择最适合我的方案,为什么?
发布于 2017-09-26 13:49:16
根据我对您的问题的推断,“我想要的是避免下载已经下载的图像,我希望它们有一些过期时间。”
为了避免再次下载图像,您可以实现以下用例,在其中使用图像本身的urls将图像存储在NSCache中。
这将类似于链接中讨论的内容。
对于过期时间情况,如果要在特定的过期时间删除所有图像,则只需检查该场景并清空缓存即可。
对于要删除单个图像的情况,根据其过期时间,您可以检查服务器的响应是否过期,如果超出限制,则再次删除缓存。
https://stackoverflow.com/questions/46408233
复制相似问题