我们经常使用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:其实大图 应该由后台处理。例如放到七牛云中,可以直接选择分辨率。奈何我们前端,人微言轻 很多事只能自己来。
网友评论