Swift 4中如何重置Alamofire特定URL的缓存?
在Swift 4中清除Alamofire特定URL的图片缓存
好问题!要精准清除特定URL对应的图片缓存,得同时处理Alamofire的ImageCache和底层URLSession的URLCache——因为这两个地方都会存储图片的缓存数据。下面是具体实现步骤:
1. 清除Alamofire ImageCache中的对应缓存
Alamofire的图片下载器默认会将URL的绝对字符串作为缓存key,所以我们可以直接通过这个key移除目标缓存:
// 获取共享图片下载器的缓存实例 let imageCache = UIImageView.af_sharedImageDownloader.imageCache // 根据目标URL的绝对字符串移除缓存 imageCache?.removeImage(forKey: targetURL.absoluteString)
如果你项目中自定义了缓存key(比如添加了额外的参数区分同URL不同场景),记得替换成你自己的key值。
2. 清除URLSession URLCache中的对应响应
除了Alamofire自己的缓存,系统URLSession也会缓存网络响应,所以需要同步清除这部分:
// 获取共享下载器的URL缓存实例 let urlCache = UIImageView.af_sharedImageDownloader.sessionManager.session.configuration.urlCache // 创建对应URL的请求 let request = URLRequest(url: targetURL) // 移除该请求的缓存响应 urlCache?.removeCachedResponse(for: request)
整合为复用方法
把上面的逻辑封装成一个方法,方便在项目中随时调用:
func clearSpecificImageCache(for targetURL: URL) { // 处理Alamofire ImageCache let imageCache = UIImageView.af_sharedImageDownloader.imageCache imageCache?.removeImage(forKey: targetURL.absoluteString) // 处理URLSession URLCache let urlCache = UIImageView.af_sharedImageDownloader.sessionManager.session.configuration.urlCache let request = URLRequest(url: targetURL) urlCache?.removeCachedResponse(for: request) }
注意:如果你的项目使用了自定义的
ImageDownloader实例(而非默认的af_sharedImageDownloader),记得把代码中的af_sharedImageDownloader替换成你自己的下载器实例。
内容的提问来源于stack exchange,提问作者husharoonie
相关产品推荐
相关产品推荐

