2011-03-18 70 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];

,當你會彈出該視圖對象當時導航控制器自動釋放所保留的對象。

相關問題