美文网首页iOSiOS开发iOS技术专题
关于sdwebImage使用中发现内存cg-raster-dat

关于sdwebImage使用中发现内存cg-raster-dat

作者: jswx_dj | 来源:发表于2016-03-18 18:55 被阅读2167次

    前几天,项目的功能基本完成差不多的时候。用allocation检测了下内存运行状况,发现当tableView快速滚动,以及页面不断跳转时,cg-raster-data在不断猛增,甚至达到了100M之多,并且当我将app退回后台时,也仅仅只是稍微释放了一点。

   为什么当加载停止后,内存没有下去呢。一开始认为,可能因为sdwebimage是会将图片下载后放进内存中一直保存至收到内存警告,或者主动清除才能释放掉。于是我在离开加载图片的页面时,做了清除缓存及disk的动作,但是仍旧没用。所以问题不是出在这里。[[SDImageCachesharedImageCache]clearMemory];[[SDImageCachesharedImageCache]clearDisk];

   然后我尝试了下将sd的最大下载内存占用设置了小一点。只要同一时间内,加载图片而多出来的内存不超过这个大小,是不是就会降低内存消耗呢。于是,我用setMaxMemoryCost 方法设置了最大内存。但是发现了另外个问题。因为sdwebimage同时能保存到内存的数量减少了,每次我下拉加载tableview时,会去从网络端不断的重新加载图片,导致页面每次reload时会闪屏。肉眼能明显的感觉的每次的闪动,用户体验特别差。

之后,在一通google。发现一个别人的解决办法,很好用,同时也确实解决了我的问题。sdwebimage在加载图片的时候,默认是shouldDecompressImages=YES.也就是框架作者本意是为了让图片加载更块,所以会帮我把图片解压至内存中,尤其图片分辨率愈大,内存消耗越大。需要将其关闭。

[[SDImageCache sharedImageCache] setShouldDecompressImages:NO];[[SDWebImageDownloader sharedDownloader] setShouldDecompressImages:NO];

关闭后发现,其实加载时候并没有特别明显的感觉加载速度变慢了。并且内存消耗几乎没有。其实开发者也有在文件里写明。只是平时很少有人会去看。

* Decompressing images that are downloaded and cached can improve peformance but can consume lot of memory.

* Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.

相关文章

网友评论

  • Winny_园球:搂着这个方法实测可行,确实减少了很多内存
  • geniu_vs:用这个方法前内存在150M以内,直接报警告⚠️,闪退;用了这个方法后,内存激增到590M,报警告杀死,是我加载的图片太大了咩~~
    geniu_vs:@jswx_dj 我找到原因了,原来有人在willdisplay这个代理方法里把cellforrow的东西又写了一遍,导致它一直霸占内存,跟那个没关系,我把这个代理方法去掉就好了,大图也没有很多内存:smile:
    jswx_dj:@geniu_vs 晕。你图片多大?一般图片要在200k以内,如果一下加载几M的图片,内存肯定激增
  • dedenc:你好楼主 我也出现了你的问题 但是我也
    [[SDImageCache sharedImageCache] setShouldDecompressImages:NO];[[SDWebImageDownloader sharedDownloader] setShouldDecompressImages:NO];
    这么做了 但是内存还是居高不下,清理内存是降低了一些 但是出现闪屏,闪的特别厉害。体验很不好. 而且我也吧下载的图片进行了剪裁,缩小尺寸了 仍然得不到明显改观 经常收到内存警告 请问你有没有这种情况呢 。如果我把下载图片的方法注释掉 我用collectionview滑动,内存基本不在变化了
    b57bc247097e:@dedenc 我也是 那你现在是怎么做呢 :sweat:
    dedenc:@咖啡铯眼涙 一直没有得到解决 不知道问题出在什么地方 能优化的都优化了
    b57bc247097e:后来解决没
  • Speak:楼主,试了试你的方法果然帮我解决了内存警告的问题,支持下
    b57bc247097e:lz,用你的这个加载内存是不激增了 但是内存也没释放啊
    jswx_dj:@Speak 多谢~
  • 一个正直的小龙猫:之后,在一通google。发现一个别人的解决办法,很好用,同时也确实解决了我的问题。sdwebimage在加载图片的时候,默认是shouldDecompressImages=YES.也就是框架作者本意是为了让图片加载更块,所以会帮我把图片解压至内存中,尤其图片分辨率愈大,内存消耗越大。需要将其关闭。




    :smiley:
    请问地址是多少
    一个正直的小龙猫:@jswx_dj O(∩_∩)O谢谢
    jswx_dj:@小小小小龙猫 哇咔咔,抱歉,刚看到,http://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/ 这里有介绍为什么要提前Decoder。等于是用空间换时间,来页面显示图片更流畅

本文标题:关于sdwebImage使用中发现内存cg-raster-dat

本文链接:https://www.haomeiwen.com/subject/zzfhlttx.html