今天测试时发现使用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的代码实现变成如下:
判断缓存的图片数量,当数量达到一定值时,清空缓存