最近项目中遇到一个问题
在tableview上展示多张图片,在加载的过程中,图片过多时,加载几张图片就崩溃了。内存溢出
为什么会出现这种情况
这个原因其实很明显,SDWebImage产生的图片缓存过多,造成APP内存溢出,崩溃了。
有三个解决办法:
方法一:
然后更改图片的大小,在tableview中展示缩略图,点击查看的时候显示原图。减少由于加载原图而占用过多的内存。缩略图的生成在服务端实现。
方法二:
可以每次加载图片清空memcache,但是效果并不好。
先清除SDImageCache缓存数据
SDImageCache *cache = [SDImageCache sharedImageCache];
[cache clearMemory];
[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];
使用下面这个方法的地方全部注掉
+ (UIImage *)decodedImageWithImage:(UIImage *)image
但是效果并不明显。同时加载比较多的高分辨率图片内存还是暴增
方法三:
更改SDWebImage的SDK,或者采用AFNetworking中的类别方法来加载图片,
插入
#import "UIImageView+AFNetworking.h"
UIImageView调用下列类别方法
[cell.imageView setImageWithURL:[NSURL URLWithString:img] placeholderImage:[UIImage imageNamed:@"image_placeholder"]];
真机测试,发现加载一张图片的内存在1~2M之间(如下图),之前SDWebImage加载时为一张图片为40多M,大幅降低了内存;