美文网首页
SDWebImage下载大尺寸图片内存暴增,APP崩溃的解决办法

SDWebImage下载大尺寸图片内存暴增,APP崩溃的解决办法

作者: yyggzc521 | 来源:发表于2020-04-03 11:00 被阅读0次

    解决办法

    SDWebImageDownloaderOptions 设置为 SDWebImageDownloaderAvoidDecodeImage | SDWebImageDownloaderScaleDownLargeImages | SDWebImageDownloaderHighPriority

    [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:url options:SDWebImageDownloaderAvoidDecodeImage | SDWebImageDownloaderScaleDownLargeImages | SDWebImageDownloaderHighPriority progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
        } completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
            
        }];
    
    压缩后的图,原图尺寸25896 * 12234

    这是一张尺寸超级大的产品原型图,尺寸是25896 * 12234 ,大小为8.1M,用我的Mac电脑打开都会稍微有点卡顿。一天产品把图发送给其他同事,同事下载点击查看原图,可想而知APP就挂掉了!

    正常情况下APP的消耗的内存也就是150M左右,当看这张原图的话,内存直接飙升到1.4G。内存小的手机,iPhone8以下的手机直接就崩溃了。

    下载原图前 下载原图后

    于是就开始查找原因,并解决问题......

    最后,在下面2篇文章中找到了解决办法(我们项目中SDWebImage用的是5.6版本)
    使用SDWebImage下载高分辨率图,导致内存暴增的解决办法
    参考文章

    但是,我设置SDWebImageDownloaderOptions 为SDWebImageDownloaderAvoidDecodeImage 却不奏效,经过我多次尝试把SDWebImageDownloaderOptions 设置为 SDWebImageDownloaderAvoidDecodeImage | SDWebImageDownloaderScaleDownLargeImages后达到了想要的效果

    • SDWebImageDownloaderAvoidDecodeImage

    对于高分辨率的图片,应该在图片解压缩后,禁止缓存解压缩后的数据

    解压缩操作中,每一个像素点都会分配一个空间来存储相关值,那么分辨率越高,图片尺寸越大,就意味着更多数量的像素点,也就意味着需要分配更多的空间!所以对于高分辨率图来说,如果缓存解压缩之后的数据,即使是几M的图片,也是有可能消耗上G的内存

    • SDWebImageDownloaderScaleDownLargeImages

    默认情况下,图片会按照他的原始大小来解码显示。这个属性会调整图片的尺寸到合适的大小根据设备的内存限制

    设置为 AvoidDecodeImage | ScaleDownLargeImages 后下载原图

    为什么分别设置SDWebImageDownloaderAvoidDecodeImage、SDWebImageDownloaderScaleDownLargeImages没有效果,而设置SDWebImageDownloaderAvoidDecodeImage | SDWebImageDownloaderScaleDownLargeImages后能达到效果,我也不是很清楚。如果哪位大神知道或者有更好的办法还望不吝赐教!

    参考资料

    SDWebImage设置大尺寸图片崩溃问题
    iOS图片加载到内存中占用内存情况
    iOS 如何计算图片加载内存中所占的大小
    参考文章

    相关文章

      网友评论

          本文标题:SDWebImage下载大尺寸图片内存暴增,APP崩溃的解决办法

          本文链接:https://www.haomeiwen.com/subject/wrocphtx.html