内存调试仍然很痛苦。 我使用导航控制器加载了4个VC。每个VC都有自己的PNG图像,用于多个控件。 在Instruments中,我意识到大多数VM区域都被ImageIO_PNG_Data占用。 当我推送/弹出VC的那些VM增加并且永不减少时(我假设dealloc某些VC也会释放图像)。
当然,调试是在模拟器中完成的。
答案 0 :(得分:6)
稍微扩展一下rokjarc的评论:
UIImage +imageNamed:
明确缓存。文档说明:
此方法在系统缓存中查找具有的图像对象 指定名称并返回该对象(如果存在)。如果匹配 图像对象尚未在缓存中,此方法加载图像 来自指定文件的数据,缓存它,然后返回 结果对象。
因此,先前加载的图像将保留在缓存中,除非或直到其他地方需要内存。不必要地从释放记忆中获得了效率。
如果你想以任何理由避免缓存 - 我会争论任何虚假的原因 - 你可以使用+imageWithContentsOfFile:
或正常的init
等价物,从{{3}获得完整路径}。
据我所知,将通过缓存访问通过界面构建器设置为图像视图和其他位置的PNG。
答案 1 :(得分:2)
如果VM分配没有分配物理内存,则没有问题。
iOS内存映射文件,在任何给定时间可能没有分配物理内存。一些VM分配是由其他应用程序共享的框架。
你需要注意的是生活堆分配,在这种情况下,它略高于4MB。