2011-03-18 30 views
1

当我关闭(弹出)viewcontroller我如何释放它,以便下次它运行它将不得不再次初始化?我如何再次启动它?iPhone - 弹出操作后释放视图控制器

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

我只是使用下面的代码来弹出当前的视图,但它并没有“杀死”它,只是使它消失并进入根。

- (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

请在游戏控制器创建的地方发布一段代码。 – hoha 2011-03-18 11:18:33

回答

4

在致电[self.navigationController pushViewController:vc animated:YES];之后,其保留计数将会增加,因为它将被添加到堆栈中。所以在这行代码之后,只需要拨打[vc release];即可。当您拨打[self.navigationController popViewControllerAnimated:YES];时,它将从堆栈中删除,其保留计数再次减1。

4

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

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

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

1

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

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

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

相关问题