2010-11-24 56 views
0

道歉的大塊「O」的文字,但我是一個初學者有點周圍有使用一個UINavigationController作爲一個應用程序我正在寫的一部分戲,我只是想知道我應該如何處理添加視圖控制器到UINavigationController和什麼時候(如果曾經)我應該釋放它們。的UINavigationController - 當釋放推視圖控制器等

正如我看到它,有兩種可能的方法添加視圖控制器時:

  1. 具有用於在管理類的每個視圖控制器的一個實例變量。在將其推入導航控制器之前對其進行初始化(如果實例變量爲零)。隨後在管理類的dealloc方法中釋放視圖控制器(如果它不爲零)。

  2. 創建視圖控制器作爲一種方法內的局部變量並將其推入導航控制器之前立即釋放它。

不過,我不能確定每一項的有效性。 (我的直覺是去實例變量的方法,但也許這是由於我的缺乏理解。)

挖掘更深一點,我懷疑我的困惑與事實有關,我很清楚自己是否負責處理推送到導航控制器堆棧的視圖控制器,或者是否在它們從視圖控制器堆棧彈出時自行處理它們。 (例如:當用戶點擊'後退'按鈕時)

如果是前者,那麼我可以看到我需要使用實例變量方法並在管理對象中實現UINavigationControllerDelegate方法以確定何時我應該釋放和零每個視圖控制器等

最後(在來世獎勵積分)你怎麼可以很容易地判斷一個方法會增加其參數之一的保留計數? (似乎沒有要在文檔中的任何線索,但也許我缺少明顯的東西。)例如,當我使用的線沿線的東西...

[[self navigationController] pushViewController:exampleVC animated:YES]; 

...這會增加視圖控制器上的保留計數? (再一次,我的直覺是應該是,但在這些危險的時候,這與巧克力防火板的使用差不多,等等。)

在此先感謝。

回答

1

這很簡單。如果將一個對象移交給另一個對象,而該對象不在您的直接控制之下,它會保留您傳遞的對象(幾乎所有的對象都是這樣的)。

例如:所有的NSArray /詞典/集收藏留住你的對象,因爲如果你將取消分配包含在這樣的記錄一個對象的某些條目將是無效的,並收集不知道。

完全一樣的是導航控制器和這樣的事情真的如你,如果當你的視圖 - 控制顯示或丟棄不知道。

+0

謝謝你的啓發式 - 我從來沒有想過用這些術語。 – 2010-11-24 11:18:42

相關問題