我有一个基于导航控制器的应用程序,它可以在相对较长的时间内处于活动状态,并且可以加载多个屏幕,在其生命周期中重新访问一些 - 业务应用程序。当我按下屏幕时,我会分配一些内存;当我回去(弹出它)时,我需要确保记忆不会丢失。
现在在泄漏中,我有一个干净的石板。没有内存泄漏,使用10.6静态分析功能并没有那么难,并使用仪器确认。手动检查,我确信我将在viewWillDisappear中释放viewWillAppear中分配的所有内容;在viewDidUnload中的viewDidLoad中分配的所有内容;否则在dealloc中分配的所有内容。
我在开发中使用了NSZombiesEnabled,但我现在肯定没有它。
在Object Allocation下运行时,我看到内存使用量在不断增长。在进入新视图时,我看到内存增加但在导航回来时没有减少相同的量。这也不仅仅是系统无法立即解除分配,当一段时间内存储器保持静止时。在每个视图中都可以看到此行为。
我可以使用哪些技术来隔离此内存?我应该瞄准每个视图后应用程序返回到某个基线吗?我如何隔离子系统使用的内存报告,例如Core Data,我依靠故障来加载对象,不应该试图明确地操作它们,以及我完全控制的代码?
答案 0 :(得分:0)
当您向其推送视图时,导航控制器内存占用量自然会增长。 如果您正在使用Core Data,则每次推送或弹出视图时都可以将整个应用程序的状态保持为Core Data。这样就不会丢失任何东西。 navigationController管理viewControllers的内存,因此如果超过iPhone内存,它将开始取消分配viewControllers。核心数据管理内存相当激进,所以这是一个很好的方式。
通过这种方法,我认为你将利用框架的内存管理而不是试图推出自己的内容并可能引入长期内存错误:)
我会选择类似于每个viewController的实体,以及一个保存已加载的上下文的实体。这样你就可以测试框架是否释放了你的任何viewController,然后恢复了navigationController堆栈。
希望至少要考虑这个问题:)