You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:19:46