iOS SDWebImage加载过多图片时导致内存溢出app闪退的问题

测试发现使用UICollectionView加载四百多张图片时app崩溃,定位是SDWebImage问题。起初将缓存bool值置为NO用磁盘缓存,后发现列表滚动图片闪烁。网上压缩图片仍可能闪退,最终在SDWebImage缓存方法中添加代码,判断缓存图片数量,达一定值清空缓存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天测试时发现使用UICollectionView 加载到第四百多张图片时,app会崩溃,断点也找不到崩溃的位置,后来暴力调试定位到问题是SDWebImage造成的问题

解决方法:在-application didfinishalaunch 方法里添加一句代码:

[SDImageCache sharedImageCache].config.shouldCacheImagesInMemory = NO;

默认为YES时,SDWebimage会把所有的图片缓存起来,由于部分图片四五百K,导致运行内存过大,以至于闪退,将该bool值置为NO,使用磁盘缓存可暂时避免该问题,后续有更好的方案的话再更新文章吧

 

2019-5-15再次修改如下:

后续发现使用该方法会在列表视图滚动时出现图片的闪烁现象,原因是没有在缓存中缓存图片,造成的该问题,所以为了让图片的展示更加平滑,我注释掉了上述代码!

网上也有方法是在缓存图片时做进一步的压缩,将图片压缩到大小大概为50K左右,但是如果数量足够多的情况下,依然会存在闪退问题,最后楼主找了取巧的方法,在SDWebimage的缓存图片方法中添加两句代码:

if (self.weakCache.count > 150) {
            [[SDImageCache sharedImageCache] clearMemory];
        }

最终SDWebImage的代码实现变成如下:

判断缓存的图片数量,当数量达到一定值时,清空缓存

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值