3

我有一个 MyViewController,它基于 UIViewController,我像下面的代码一样使用它:

MyViewController *nextViewController = [[MyViewController alloc] init]; [self.navigationController pushViewController:nextViewController animated:YES]; [nextViewController release];

在 MyViewController 中,带有用户事件,具有以下代码:

[self.navigationController popViewControllerAnimated:YES];

现在,我发现,MyViewController 的 dealloc 没有被调用,但是,当我将 App 切换到后台时,例如,通过 home 按钮,dealloc 方法已经被调用了!这是个大问题!会有很多 MyViewController 不会被释放,当用户转到一个 MyViewController 时,一次又一次地返回,只是,只有当应用程序转到后台时,才能释放大量内存。

所以,谁能帮我解决这个问题,谢谢!

4

1 回答 1

8

显而易见的原因是某些东西保留了您的 viewController。您将不得不仔细查看您的代码。您是否在课堂上使用委托做任何事情,因为他们有时会保留委托。NSURLConnection 将保留你的类,NSTimer 也是如此。您可以在班级中分散代码并记录班级的保留计数,并尝试找出在哪里。在您到目前为止显示的代码中,保留应该只是 1,因为该类仅由导航控制器保留。

此外,在您弹出视图之前,获取对它的引用,在没有动画的情况下弹出它,然后向它发送一些消息,让它报告保留计数(这将是您编写的一些新方法)。这个新方法还可以记录其他事情,比如它是否有任何计时器在运行、NSURLConnections 等。

于 2012-08-24T11:36:00.913 回答