当调用navigationController popViewControllerAnimated时,不会调用viewController的dealloc

时间:2012-08-24 10:51:49

标签: ios memory-leaks dealloc navigationcontroller popviewcontrolleranimated

我有一个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不会被释放,并且一次又一次地返回,只是当应用程序转到后台时,大量的内存才会被释放。

所以,任何人都可以帮助我,谢谢!

1 个答案:

答案 0 :(得分:8)

显而易见的原因是有些东西会保留你的viewController。您必须仔细查看您的代码。您是否在您的班级中执行任何使用委托的事情,因为他们有时会保留委托。 NSURLConnection将保留您的课程,NSTimer也是如此。您可以在您的类中分散代码并记录您的类的保留计数,并尝试找出其中的位置。在你到目前为止显示的代码中,retain可能只是1,因为类只是由导航控制器保留。

此外,在弹出视图之前,获取对它的引用,使用NO动画弹出它,然后向它发送一些消息,报告保留计数(这将是您编写的一些新方法)。这种新方法还可以记录其他内容,例如是否有任何计时器,NSURLConnections等。