加载高清图内存Memory飙升,SDWebImage ,imageNamed,imageWithContentsOfFile

很久以前就像怎理一下这个问题,一直被其他事(CF)给耽误了。

现象与问题:加载高清图时,Memory飙升!!!

不管是使用第三方还是用系统API。都会出现这个问题。

一:先说本地加载

    当我们使用 系统API 加载本地高清图(2M以上我就认为是高清图了,我的测试图片是在10M左右)时出现内存飙升

    

    cell.ImgView.image = [UIImage imageNamed:@"image00.png"];

     


我就在cell上加载了3张本地图片。然后内存飙升到150M+了,你没有看错,150多兆了。然而这并不是可怕的,可怕的是退出这个控制器了,内存没有变化,还是这么多,对。内存下不去了。



这个时候有人可能就会想。可不可以用  imageWithContentsOfFile 

    

    NSString *path = [[NSBundle mainBundle] pathForResource:@"image03.png" ofType:nil];

    cell.ImgView.image = [UIImage imageWithContentsOfFile:path];

    

答案肯定是可以的。但是意外也随之而来啊!
看看使用 imageWithContentsOfFile 的效果吧



是的。你还是没有看错,400多兆了。一样的图片,使用 imageWithContentsOfFile 内存更加恐怖了,但是退出这个控制器了。内存下去了。变成原来的20M左右了。 

所以 imageWithContentsOfFile和 imageNamed 的使用场景要看你自己怎么去衡量了。

但是这是为什么呢?暂时我来科普一下GPU吧

熟悉OpenGL的同学知道,GPU内次渲染图形的时候分为 片段着色器(FrameShade)和顶点着色器(Vertex Shade)。在处理纹理过程中。会给每个Vertex(可以理解为像素)分配内存,让GPU去渲染。所以说在处理 高清图离屏渲染 的时候,会让内存飙升


二:用SDWebImage 加载网络高清图时

本来在 SDWebImage 4.0.0以前。具体是哪个版本忘记了。反正是17年上旬。那时候的SDWebImage 加载网络高清图时。也会出现内存飙升的情况。但是在17年10月份(具体版本没注意,所以只能以时间来区分了)以后。SDWebImage 的作者 rs。更新了或者是修复了这个问题。



3张都是网络高清图




内存情况只有再全部加载出来时,由默认图片替换高清图时。GPU在内存中渲染像素让内存飙升一下。也就一秒钟。看了rs 也认识到这个问题并修复了。(下班。明天再补,哈哈)







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值