如何在注销操作中取消分配uiviewcontroller/unload视图

mbh*_*mbh 6 iphone xcode ios4 ios ios5

我认为这是一个非常常见的用例,因为我在几个应用程序中看到过它.但经过几天的努力,我仍然在努力解决这个问题.我有如下结构:

UITabBarController
-- UINavigationController1
 ---- UITableViewController1

-- UINavigationController2
---- UITableViewController2
Run Code Online (Sandbox Code Playgroud)

现在我在UITableViewController2上有一个注销按钮.当我点击该注销按钮时,我想要取消分配所有和任何视图控制器,所有视图都被卸载.基本上就像启动应用程序一样开始.我基本上希望再次调用每个UITableViewController上的viewDidLoad.

在UITableViewController2上执行注销操作时,我尝试在appdelegate中调用以下方法.

-(void) logout {
    for (UINavigationController* ctrl in self.tabBarController.viewControllers) {
        [ctrl popToRootViewControllerAnimated:NO];
        ctrl.visibleViewController.view = nil;
    }

[self.tabBarController.view removeFromSuperview];
[self.window addSubview:self.tabBarController.view];
Run Code Online (Sandbox Code Playgroud)

}

但是,唉,它似乎没有用?

任何想法如何完成这样的事情?另外,我在iOS4和iOS5中看到了与visibleViewController不同的行为.我这里没有使用任何模态viewcontroller.任何陷阱?

更新:我没有使用ARC

谢谢你

Jim*_*Jim 1

您需要释放视图控制器。当调用它们的release方法时,该方法应该包括释放其对象的所有资源(并释放其超类)的语句。