我有一些非常简单的代码,其中使用UINavigationController并添加了rootViewController。发生一些处理后,我想弹出当前的视图控制器,并用另一个替换。这似乎工作正常,但我原来的视图控制器不会取消分配。我在它的dealloc中设置了一个断点,并且它从未被命中。下面是我的代码。不知道为什么会发生。只是为了测试我是否两次释放了startController,它确实消失了。

StartViewController *startController = [[StartViewController alloc] initWithNibName:@"StartViewController" bundle:[NSBundle mainBundle]];

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:startController];
    [nav pushViewController:startController animated:NO];

    self.navController = nav;

    [startController release];
    [nav release];


谢谢你的帮助。

最佳答案

您的最终目标是使视图控制器的保留计数为零。因此,请确保释放视图保留的所有内容,并且保留视图的任何地方也将释放。

请检查以下可能原因:


如果您有自定义的后退按钮,请确保从navController弹出视图控制器。默认的“后退”按钮将正常工作。
确保在viewDidUnload中将所有IBOutlets都设置为nil

- (void)viewDidUnload
{
   [super viewDidUnload];
   self.webView = nil;
}

如果您的视图是模型类的观察者以接收事件


例如

model.addObserver(myView);


并且一定也要做

model.removeObserver(myView);


我希望这有帮助。

关于iphone - NavigationController initWithRootViewController取消分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5344605/

10-13 07:43