UIViewController内存警告问题

时间:2010-02-09 09:05:43

标签: iphone memory uiviewcontroller

我的视图控制器发生了奇怪的事情。发布applicationDidReceiveMemoryWarning时,它会从堆栈中删除除可见视图(第二级视图)之外的所有视图,这是预期的行为。但是,如果我然后导航回根视图,它还有一个后退按钮,可以导航回自身。从那里开始,应用程序视图的行为非常奇怪,因为应用程序无用。

更奇怪的是,完全相同的第二级视图(没有内存泄漏)可以在没有任何内存警告的情况下正常工作,但有时在应用程序启动时会导致内存警告,从而导致导航问题。该视图包含与以前相同的所有控件和数据,但对于设备来说可能偶尔会过多。这与启动时设备上可用的内存有关吗?这似乎只发生在硬件上。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我发现了问题 - 毕竟这是我的代码。

在应用程序启动时,我加载了我的根视图控制器,然后在我的根视图控制器的viewDidLoad方法中,我告诉它在条件适用的情况下加载第二个视图。

当发生内存警告时,它会在退出第二个视图时重新创建根视图控制器,然后在仍然显示根视图的同时再次创建第二个视图。

然后导致导航变得精神错乱。

答案 1 :(得分:0)

到目前为止,我还没有关于记忆问题的专家。但是在这种事情之后的奇怪行为向我表明,记忆的消除不会一直发生。也许一些引用仍然保留,应用程序认为这些是有效的引用,但实际上,内存不再分配。也有可能内存被重新分配,旧的引用仍然存在,这也可能导致奇怪的行为。

嗯,我不能在这里提供太多建议,只是你可以检查对未分配区域的引用