iOS 内存占用问题之 ImageIO_PNG_Data

iOS 内存占用问题之 ImageIO_PNG_Data

问题来源

做APP调试的时候,发现总是收到 didReceiveMemoryWarning,打开 Instruments 的 Memory Leaks 一看,ImageIO_PNG_Data 占了好大的内存(近100MB)。

其实这个问题零零碎碎地在很多地方都有人提到过,但是提到 ImageIO_PNG_Data 似乎不多,碰到问题的时候不好搜索,这里着重提一下。

问题分析

这篇文章里提到了关于图片缓存的问题,看起来和我们碰到的这个问题有关。

具体来说,就是我们通常会用两种方式加载图片:

UIImage *img = [UIImage imageNamed:@"myImage"]; // caching
// or
UIImage *img = [UIImage imageWithContentsOfFile:@"myImage"]; // no caching

根据苹果官方参考:

If you have an image file that will only be displayed once and wish to ensure that it does not get added to the system’s cache, you should instead create your image using imageWithContentsOfFile:. This will keep your single-use image out of the system image cache, potentially improving the memory use characteristics of your app.

  • imageNamed: 会将图片加载到系统缓存,适合需要重复利用的图片,提高加载速度
  • imageWithContentsOfFile: 不会将图片加载到系统缓存,适合不重复利用的图片

问题解决

  • 检查使用到 imageNamed: 的地方,根据需求场景,将不必要缓存的部分全部替换为 imageWithContentsOfFile:,会发现ImageIO_PNG_Data的内存占用瞬间就降下来了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值