sdwebimage 加载大图导致项目内存溢出

我们经常使用sdwebimage 加载网络图片。就一句话 [imageView sd_setImageWithURL:[NSURL URLWithString:url];

正常使用完全没有任何问题。然而最近做了个项目,照片高清修复。项目内存直接飙升2G,部分机型直接闪退。

多方面检查后发现由于sdwebimage有缓存机制存在,导致项目内存过大 直接闪退。

-----解决方案----
其实框架本身已经给了我们解决方案。

SDWebImageOptions newOptions = AvoidDecodeImage | ScaleDownLargeImages;
[imageView sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:image options:newOptions];

options中 SDWebImageScaleDownLargeImages 参数 对于大图下载,会边压缩边下载。

图片大图下载使用 SDWebImageDownloaderScaleDownLargeImages

SDWebImageDownloader *manager = [SDWebImageDownloader sharedDownloader];
[manager downloadImageWithURL:[NSURL URLWithString:url] options:SDWebImageDownloaderScaleDownLargeImages progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
NSLog(@"progress = receivedSize %ld expectedSize = %ld",receivedSize , expectedSize);
} completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {

    imageView.image = image;
} ];

完美解决大图内存暴增问题。

ps:其实大图 应该由后台处理。例如放到七牛云中,可以直接选择分辨率。奈何我们前端,人微言轻 很多事只能自己来。

你可能感兴趣的:(sdwebimage 加载大图导致项目内存溢出)