2011-01-28 75 views
1

首先,對不起我的英語不好。我會嘗試解釋我的問題:NavigationController Stack

我有一個RootViewController(基於導航的項目)。因此,它顯示的tableview當用戶選擇表(didSelectRowAtIndexPath方法)的y行執行以下操作以顯示下圖:

NextViewController *nextView = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil]; 
[self.navigationController pushViewController:nextView animated:YES]; 
[nextView release]; 

會發生什麼,如果用戶選擇導航欄的後退按鈕並選擇再次行,並重復這樣做?很多新的視圖(NextViewController的實例)正在創建(大量的內存分配)?或者他只是導航棧?

你能幫我嗎?我不想以這種方式浪費記憶(如果是這種情況)。 謝謝!

回答

1

如果用戶切換來回從你的RootViewController的一個NextViewController多次,這裏是發生了什麼:

  1. 的NextViewController創建(alloc「d)在didSelectRowAtIndexPath:方法。因爲你調用了一個init方法,所以你有責任釋放它。
  2. 您將nextView推入導航控制器堆棧,該堆棧保留它。
  3. 你釋放nextView,所以保留的唯一東西是導航控制器。
  4. 一旦您的用戶從NextViewController返回,導航控制器將釋放它。現在沒有什麼東西是保留nextView,所以它得到dealloc'd。內存被釋放。

基本上,你創建一個NextViewController每個用戶來回移動(你不「只是導航堆棧」,因爲對象每次換水)時間,但你不漏一大量的內存或持有您創建的每個控制器。你的內存使用情況很好。

+0

非常感謝。現在,我很清楚:) – Samui 2011-01-28 19:52:26