SDWebImage 4.x及以上版本如何取消下载请求?sd_cancelCurrentImageLoad已废弃
解决SDWebImage 4.x+取消图片下载请求的问题
嘿,这个问题我太熟悉了!SDWebImage 4.x版本之后确实把sd_cancelCurrentImageLoad给废弃移除了,不过官方提供了更灵活的替代方案,分几种常见场景给你详细说:
1. 针对UIImageView/UIButton等控件的场景
如果你是用SDWebImage的扩展方法(比如sd_setImage(with:placeholderImage:))给控件加载图片,现在可以这样取消请求:
Swift代码示例
// 取消当前控件正在进行的图片加载请求 imageView.sd_cancelCurrentImageLoadOperation(withKey: SDWebImageEmptyString) // 或者直接取消该控件所有关联的图片加载请求 imageView.sd_cancelAllImageLoadOperations()
Objective-C代码示例
// 取消当前请求 [self.imageView sd_cancelCurrentImageLoadOperationWithKey:SDWebImageEmptyString]; // 取消所有请求 [self.imageView sd_cancelAllImageLoadOperations];
2. 自定义下载请求的场景
如果是你手动创建SDWebImageDownloader或SDWebImageManager发起的请求,只需要保存请求操作的引用,在需要取消时调用cancel()方法即可:
Swift代码示例
// 创建下载请求并保存操作引用 let downloader = SDWebImageDownloader.shared guard let imageURL = URL(string: "https://example.com/your-image.jpg") else { return } let operation = downloader.downloadImage(with: imageURL) { (image, data, error, finished) in // 处理下载结果 } // 需要取消时调用 operation.cancel()
Objective-C代码示例
SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader]; NSURL *imageURL = [NSURL URLWithString:@"https://example.com/your-image.jpg"]; SDWebImageDownloaderOperation *operation = [downloader downloadImageWithURL:imageURL completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) { // 处理下载结果 }]; // 取消请求 [operation cancel];
额外小提示
如果你用SDWebImageManager统一管理请求,还可以通过manager批量或精准取消请求:
let manager = SDWebImageManager.shared // 取消所有正在进行的请求 manager.cancelAll() // 根据URL取消特定请求 if let targetURL = URL(string: "https://example.com/target-image.jpg") { manager.cancelAllOperations(with: targetURL) }
内容的提问来源于stack exchange,提问作者Robot Bender
相关产品推荐
相关产品推荐

