关于SDWebImage使用中发现内存cg-raster-data 猛增(转载)

原地址:https://www.jianshu.com/p/205c1daa8535
前几天,项目的功能基本完成差不多的时候。用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.
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前几天,项目的功能基本完成差不多的时候。用allocation检测了下内存运行状况,发现当tableView快...
    jswx_dj阅读 10,061评论 18 7
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,084评论 8 265
  • 黑夜总是分外的寂寥,蜷缩在一方小小的空间里,狭窄、拥挤、昏暗,与之不同的是,城市的道路上永远有人忙于奔走,就像这座...
    郁倦一阅读 3,411评论 0 0
  • 你说: 遇见我是意外 认识我是意外 喜欢上我也许也是意外…… 我说: 我想…… 我等…… 我期待…… 我遇见你是最...
    尚先生的女人阅读 1,310评论 0 0
  • 你说那年大雪 封住归家之路 车上与她相识 你们一见如故 你说她似孩童 让人想去保护 独处 再见已是夏暮 街头宿醉孤...
    于北妧阅读 1,216评论 0 1

友情链接更多精彩内容