我有一个MyViewController,它基于UIViewController,我像下面的代码一样使用它:
MyViewController *nextViewController = [[MyViewController alloc] init];
[self.navigationController pushViewController:nextViewController animated:YES];
[nextViewController release];
在MyViewController中,有一个用户事件,有以下代码:
[self.navigationController popViewControllerAnimated:YES];
现在,我发现,MyViewController的dealloc不会被调用,但是,当我将应用程序切换到后台时,例如,传递home按钮,dealloc方法已经被调用了!这是个大问题!会有很多MyViewController不会被释放,当用户转到MyViewController,然后一次又一次地返回,只是,只有当应用程序转到后台时,大量内存才能被释放。
所以,有人能帮我吗,谢谢!
显而易见的原因是某些东西保留了您的viewController。您必须仔细查看您的代码。您是否在类中使用委托执行任何操作,因为它们有时会保留委托。NSURLConnection将保留您的类,NSTimer也是。您可以在类中分散代码,记录类的保留计数,并尝试找出位置。在迄今为止显示的代码中,retain can应该只有1,因为类只由导航控制器保留。
此外,在弹出视图之前,获取对它的引用,在弹出时不显示动画,然后向它发送一些消息,让它报告保留计数(这将是您编写的一些新方法)。这个新方法还可以记录其他事情,比如是否有计时器在运行、NSURLConnection等。