PNG图像从未取消分配

时间:2013-12-26 19:19:12

标签: ios memory-management instruments

内存调试仍然很痛苦。 我使用导航控制器加载了4个VC。每个VC都有自己的PNG图像,用于多个控件。 在Instruments中,我意识到大多数VM区域都被ImageIO_PNG_Data占用。 当我推送/弹出VC的那些VM增加并且永不减少时(我假设dealloc某些VC也会释放图像)。 enter image description here

当然,调试是在模拟器中完成的。

2 个答案:

答案 0 :(得分:6)

稍微扩展一下rokjarc的评论:

UIImage +imageNamed:明确缓存。文档说明:

  

此方法在系统缓存中查找具有的图像对象   指定名称并返回该对象(如果存在)。如果匹配   图像对象尚未在缓存中,此方法加载图像   来自指定文件的数据,缓存它,然后返回   结果对象。

因此,先前加载的图像将保留在缓存中,除非或直到其他地方需要内存。不必要地从释放记忆中获得了效率。

如果你想以任何理由避免缓存 - 我会争论任何虚假的原因 - 你可以使用+imageWithContentsOfFile:或正常的init等价物,从{{3}获得完整路径}。

据我所知,将通过缓存访问通过界面构建​​器设置为图像视图和其他位置的PNG。

答案 1 :(得分:2)

如果VM分配没有分配物理内存,则没有问题。

iOS内存映射文件,在任何给定时间可能没有分配物理内存。一些VM分配是由其他应用程序共享的框架。

你需要注意的是生活堆分配,在这种情况下,它略高于4MB。