当我关闭(弹出)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的工作原理..提前感谢!
编辑:好的!我现在看到了...我推动视图控制器的方式我同时保留了它。刚才我看到你的帖子比较,谢谢。
答案 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。然后你必须再次分配视图控制器。