我希望优化下面的代码,以便缓存图像,并且只有在它们之前没有被缓存时才下载它们。我找不到如何使用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
。 - RobNSURLCache
会根据服务器响应头中提供的内容进行缓存。此外,它还会根据文档不清晰的规则来限制缓存,特别是如果下载超过总缓存的5%,它将不会对其进行缓存,无论服务器头信息如何(这是Leo提供的链接所概述的增加缓存大小的原因之一)。 - Rob