ios 加载大量图片崩溃_iOS关于tableView图片加载内存暴增甚至闪退的问题

最近在接手一个项目,发现项目有一个页面特别容易闪退,在查看了各种原因后,发现页面在滚动的时候,内存增加的巨大,经过查看,了解到是SDWebImage在处理图片的时候引起的,版本号为3.8.2,因为项目特殊性,该库保持在该版本,据说4.+的版本已经修复了这个问题,没有经过实测,目前不清楚。

具体问题:SDWebImage在下载高清大图后,会对图片进行解压缩操作,并且缓存起来,以保证tableView或collectionView交互更加流畅,但是如果是加载高分辨率图片的话,会适得其反,极有可能造成大量的内存消耗。

我在查看到这个问题后,想好的处理这块的问题,想到了2点:

1.项目的tableView需要进行优化。

SDWebImage的这个问题需要处理。

从第一点来说,有目的性的优化方案是:利用runloop的机制,在tableview滚动结束后再进行图片的加载。

这里参考DWURunLoopWorkDistribution的代码,不过从体验上来说,滚动停止后才开始改变cell的具体图片,也就是说图片依然保持上次加载出来的状态,这种情况下的体验并不算太好,但是在这种情况下,性能得到了大大的提升。

如果有更好的方案,希望不吝赐教。

关于问题二就比较简单了,设置以下两个属性禁止解压缩操作:

[[SDImageCache sharedImageCache] setShouldDecompressImages:NO];

[[SDWebImageDownloader sharedDownloader] setShouldDecompressImages:NO];

这个属性设置是全局性的,也就是在正常加载的情况下,可将属性更改为

[[SDImageCache sharedImageCache] setShouldDecompressImages:YES];

[[SDWebImageDownloader sharedDownloader] setShouldDecompressImages:YES];

这里还有另外一个思路,如果后台提供相应的处理,那么,就是一个皆大欢喜的情况。

1.后台限制上传图片的大小,或者做图片压缩。

2.后端使用大小图的方式,以原图,压缩图,微缩图的情况传递给前端,前端根据情况进行相应项的加载。

以上操作可以通过第三方平台达成,如果条件允许,可使用成熟的三方平台处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值