【发布时间】:2017-04-13 21:50:01
【问题描述】:
我想增强下面的代码以缓存图像,并且仅在之前未缓存图像时才下载它们。我似乎找不到任何关于如何使用 URLSession 对象来做到这一点的好例子。
extension UIImageView {
func loadImageWithURL(_ url: URL) -> URLSessionDownloadTask {
let session = URLSession.shared
let downloadTask = session.downloadTask(with: url, completionHandler: { [weak self] url, response, error in
if error == nil, let url = url,
let data = try? Data(contentsOf: url), let image = UIImage(data: data) {
DispatchQueue.main.async {
if let strongSelf = self {
strongSelf.image = image
}
}
}
})
downloadTask.resume()
return downloadTask
}
}
【问题讨论】:
-
不相关,你的
if let strongSelf = self { strongSelf.image = image }可以简化为self?.image = image。 -
FWIW,
NSURLCache将根据服务器响应标头中提供的内容进行缓存。此外,它将根据记录不充分的规则限制缓存,最值得注意的是,如果下载量超过总缓存的 5%,它不会缓存它,无论服务器的标头说什么(这是增加缓存大小的原因之一如 Leo 提供的链接中所述)。
标签: swift caching urlsession image-caching nscache