NavigationController initWithRootViewController dealloc

时间:2011-03-17 20:06:54

标签: iphone objective-c uinavigationcontroller dealloc

我有一些非常简单的代码,我使用的是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];

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您的最终目标是将视图控制器的保留计数设置为零。因此,请确保视图保留的所有内容都已发布,并且视图保留的位置也会释放。

请检查以下可能原因:

  1. 如果您有自定义后退按钮,请确保从navController中弹出视图控制器。默认的“后退”按钮可以正常工作。

  2. 确保在viewDidUnload中将所有IBOutlet设置为nil

    - (void)viewDidUnload 
    {
       [super viewDidUnload];
       self.webView = nil;
    }
    
  3. 如果您的视图是模型类的观察者以接收事件

  4. 例如

    model.addObserver(myView);
    

    也一定要做

    model.removeObserver(myView);
    

    我希望这会有所帮助。

答案 1 :(得分:0)

看起来你的self.navController有一个持有引用。也许放

self.navController =nil; 

适当的地方,以便在弹出视图时它被释放。

答案 2 :(得分:0)

我试图弹出根视图控制器。我改为使用setViewControllers对象中的UINavigationController消息来替换所有视图控制器。