我有一些非常简单的代码,我使用的是UINavigationController并添加了一个rootViewController。在发生一些处理之后,我想弹出当前的视图控制器并将其替换为另一个。这似乎工作正常,但我原来的视图控制器没有dealloc。我在它的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];
感谢任何帮助。
答案 0 :(得分:1)
您的最终目标是将视图控制器的保留计数设置为零。因此,请确保视图保留的所有内容都已发布,并且视图保留的位置也会释放。
请检查以下可能原因:
如果您有自定义后退按钮,请确保从navController中弹出视图控制器。默认的“后退”按钮可以正常工作。
确保在viewDidUnload中将所有IBOutlet设置为nil
- (void)viewDidUnload
{
[super viewDidUnload];
self.webView = nil;
}
如果您的视图是模型类的观察者以接收事件
例如
model.addObserver(myView);
也一定要做
model.removeObserver(myView);
我希望这会有所帮助。
答案 1 :(得分:0)
看起来你的self.navController有一个持有引用。也许放
self.navController =nil;
适当的地方,以便在弹出视图时它被释放。
答案 2 :(得分:0)
我试图弹出根视图控制器。我改为使用setViewControllers
对象中的UINavigationController
消息来替换所有视图控制器。