iOS Crazies外语学习首页投稿(暂停使用,暂停投稿)

SDWebImage加载.gif 内存狂飙问题

2016-08-10  本文已影响2668人  不会打滚儿的狮子

于之前一直维护新浪博客,大量的东西都在这里,实在不想更换其他博客了,怎奈新浪对代码的排版,蛋疼至极,我尽量排版清晰些;

闲着没事,尝试用SD加载 .jif,在Cell里加载了大量的.jif,加载完成后意外出现了,内存狂飙到 700M+,滑动Cell会下降,大概到150M左右(所用的 .jif 本身比较大); 这个不能忍,于是各种解决:
在测试过程中发现SD 对混合图层的处理也不是很到位;不管是动态图还是静态图,都未做混合图层处理;

顺便提一下混合图层:
Color Copied Images:该选项可以给绘制时被Core Animation复制的图片添加蓝绿色叠加层
Color Misaligned Images:如果图片边界没有与目标像素完美对齐,该功能可为图片叠加上一层品红色。如果图
片使用确定的比例大小绘制,那么该功能会为图片添加一层黄色叠加。

原因概述: SD在对 .jif 的处理过程中采用了一个数组存储 jif 的帧图片,然而并没有及时释放;注意文中标注”
“的地方;
解决方案: 1. 采用YY_WebImage框架,
2. 在使用SDWebImage加载较多图片造成内存警告时,定期调用 [[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"]; 比如tableView加载更多的时候;

这里只介绍方案二:

1.首先分析SD加载 jif 的过程:
sd_animatedGIFNamed是SDWebImage提供的加载gif图片的一种方法。我们点进去这个方法去看以下。

sd_animatedGIFNamed 这个方法的实现如下。生成一个UIImage对象。

注释已经很详细了,这个类方法里面主要是确定当前设备的分辨率,以便加载不同分辨率的图片。
然后通过sd_animatedGIFWithData 后续处理
2.再来看看sd_animatedGIFWithData:

上一篇下一篇

猜你喜欢

热点阅读