我开发了一个iphone应用程序,它打开一个标签视图,第一个标签是uinavigationcontroller。在该控制器内是一个包含uitableview的uiviewcontroller。 tableview中列出了2个项目。当我选择一个或另一个项目时,它会显示另一个具有动态生成的uiviews的uiviewcontroller。
当我按下导航控件顶部的“后退”按钮,返回上一个uiviewcontroller(包含tableview),然后再次选择uitableview中的2个项目中的1个时,它几乎吃掉了根据仪器的2M内存。每次都会发生这种情况,直到达到大约24M,并且我的应用程序崩溃。
我没有任何泄漏。
当按下“后退”按钮释放分配给uiviewcontroller的内存时,我需要做些什么。
答案 0 :(得分:2)
我不确定您在iPhone开发方面有多远,或者您对内存管理了解多少,但它可能是一个引用计数问题。记住:如果你调用alloc或retain,你需要调用release,而不要在你没有分配或保留的东西上调用release。
答案 1 :(得分:1)
导航控制器会保留推入其堆栈的所有视图控制器,因此,如果您确保此类视图控制器是自动释放的,或者您没有对它们声明(例如,分配,推送,释放),它们将在以后自动释放弹出。
如果您正在执行此操作并且仍在丢失内存,那么您可能会从视图控制器中过度保留自定义视图?
很难说没有看到代码,但有一点可能有用的是在所有UIViewControllers上实现-didReceiveMemoryWarning并记录它们的详细信息 - 然后如果你看到来自视图控制器的内存警告,你认为应该已经解除分配,你有一个进一步调查的起点。
另外,您是否尝试过Clang静态分析仪?泄漏工具很有用,但会产生大量漏报。 CSA也不是灵丹妙药,但它抓住了Leaks错过的一些东西。