解决SDWebimage加载过多过大图片导致内存爆表崩溃的问题

iOS 专栏收录该内容
12 篇文章 0 订阅

问题:

Restore the connection to “xxxx” and run “xx” again, 
or if “xx” is still running, 
you can attach to it by selecting Debug > Attach to Process > xx.

在这里插入图片描述

原因:

collectionView一屏加载显示多个大图,导致内存消耗激增,程序被系统关闭。

(这里collectionView已经实现重用,高度以及view统一布局,主要内存问题在于图片的请求和加载处理过程)

  • 1、图片太大,服务器没有做相关压缩及缩略图处理
  • 2、SDWebimage同时加载过多过大高分辨率图片,内存消耗爆表。

解决方向:

  • 1、服务端处理图片,压缩以及做缩略图处理。(暂时没有)
  • 2、上传图片作压缩处理,在不损耗质量的前提下尽量压缩。(尽量去做,但是图片并非全部来自手机上传,而且也只是适当减轻一些负载,但并不能解决问题)
  • 3、解决SDWebimage加载高分辨率大图的问题。

iOS解决SDWebimage加载高分辨率大图crash的问题。

之前看到很多解决问题的方法,比如

[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];这个在这里没有什么效果,只是清除在加载图片开始的时候做清理,但是对于列表UITableview或者UICollectionView而言,瞬间发出N多个加载请求,主要负载其实还在请求之后。

不过这篇文章里提到了几种解决方法,虽然最后作者选择了当前方法,但是实际使用之后,效果并不好。

不过这篇文章提到的方法并没有实际验证,因为SDWebimage版本的问题,当前使用版本为pod 'SDWebImage', '~> 4.3.3'

  • 3、SDWebimage下载的options选项加入SDWebImageScaleDownLargeImages

对于少量的分辨率图片会有效果。但是对当前所要解决的大量(一屏显示30-40张)的高质量图片,依旧会因为内存激增而崩溃。

在APPDelegate中设置相关参数。

- (void)imageLoadingSettings {
    [SDImageCache sharedImageCache].config.maxCacheAge = 3600 * 24 * 7;
    [SDImageCache sharedImageCache].maxMemoryCost = 1024 * 1024 * 20;
    [SDImageCache sharedImageCache].config.shouldCacheImagesInMemory = NO;
    [SDImageCache sharedImageCache].config.shouldDecompressImages = NO;
    [SDWebImageDownloader sharedDownloader].shouldDecompressImages = NO;
    [SDImageCache sharedImageCache].config.diskCacheReadingOptions = NSDataReadingMappedIfSafe;
}

其次在加载方法的options中设置SDWebImageScaleDownLargeImages

[_billImageView sd_setImageWithURL:url placeholderImage:image options:SDWebImageRetryFailed|SDWebImageScaleDownLargeImages|SDWebImageRefreshCached];

[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"]; // tableView/collectionView加载更多的时候,会有一定的效果。

这里的options一定不能设置SDWebImageProgressiveDownload否则前面的设置并不会产生效果,导致崩溃。

这是一种极端的情况,一般加载大图,在手机上只需要一次加载少量的图片。如果是列表显示,一般会做图片的缩略处理。

  • 0
    点赞
  • 0
    评论
  • 5
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

优秀的竹子

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值