iPhone - 弹出操作后释放viewcontroller

时间:2011-03-18 11:13:37

标签: iphone view uiviewcontroller navigation

当我关闭(弹出)viewcontroller时如何释放它以便下次运行时它必须再次初始化?我该如何再次启动呢?

假设我在该视图控制器上放置了一些cocos2d游戏层。我想添加一个按钮来关闭它(弹出视图)而不是像现在一样在后台运行。

我只是使用下面的代码弹出当前视图,但它并没有“杀死”它,只是让它消失并转到root。

- (IBAction) closeThisOne {
    [self.navigationController popViewControllerAnimated:YES];
}

我以这种方式创建视图:

- (IBAction) buttonPressed {
if (self.mViewController == nil) {
    MainViewController *vc = [[MainViewController alloc]
                                      initWithNibName:@"MainView" bundle:[NSBundle mainBundle]];
    self.mViewController = vc;
    [vc release];
}
[self.navigationController pushViewController:self.mViewController animated:YES];
}

简单地说......我该怎样做: 根视图>开始游戏视图>回到根视图(并发布游戏)>再次开始游戏视图

我仍然有点困惑如何导航和cocos2d的工作原理..提前感谢!

编辑:好的!我现在看到了...我推动视图控制器的方式我同时保留了它。刚才我看到你的帖子比较,谢谢。

4 个答案:

答案 0 :(得分:4)

将视图控制器推送到UINavigationController堆栈后释放它。 UINavigationController将保留它。

 DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"Nib" bundle:nil];
 // ...
 [self.navigationController pushViewController:detailViewController animated:YES];
 [detailViewController release];

答案 1 :(得分:4)

调用[self.navigationController pushViewController:vc animated:YES];后,它的保留计数将增加,因为它将被添加到堆栈中。因此,在这行代码之后,您只需要调用[vc release];。当你调用[self.navigationController popViewControllerAnimated:YES];时,它将从堆栈中删除,其保留计数再次减1。

答案 2 :(得分:1)

当您同时推送nextClass对象时,只需释放该类对象,这将释放viewController的对象,navigationController将保留该对象。

DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"Nib" bundle:nil]; // ... [self.navigationController pushViewController:detailViewController animated:YES]; [detailViewController release];

当你在那时弹出那个视图对象时,导航控制器会自动释放那个保留的对象。

答案 3 :(得分:0)

据我所知[self.navigationController popViewControllerAnimated:YES];将释放导航堆栈中存在的当前viewcontroller。然后你必须再次分配视图控制器。