2008-12-30 25 views
1

我正在使用UINavigationController,並且在推送新視圖時遇到釋放對象的麻煩。我想在推送之前在新控制器上設置一個對象。目前我在做這個問題的方法是:使用UINavigationController時發佈對象

如果我去掉最後一行,則程序崩潰時,我在我的控制導航回。我還有一個關於何時/如何釋放對象的問題。在bookObj中,我有一個可變的頁面對象數組,我想改變當前頁面對象的文本。我這樣做:

Page *pageObj = [[bookObj pagesArray] objectAtIndex:currentPage]; 
pageObj.page_Text = textView.text; 
[[bookObj pagesArray] replaceObjectAtIndex:currentPage withObject:pageObj]; 
//[pageObj release]; 

如果我取消註釋最後一行,程序崩潰。它會讓我向前導航,但是當我回到原處並嘗試再次前進時,它會崩潰。

自動釋放對象帶來類似的結果。請告訴你是否可以。謝謝。

編輯:當我釋放第一個示例varOpenPageController並運行與泄漏模擬器然後該程序似乎正常工作。但是,如果我不運行泄漏,那麼它崩潰。有沒有人有任何想法,爲什麼這可能發生?謝謝。

回答

2

它可能支付閱讀Apple Memory Management Document。第二個項目不需要釋放pageObj,因爲它只包含對bookObj數組中實際項目的引用。如果這是有道理的,那不是實際的項目。所以你實際上做的是從數組中釋放實際的項目,所以當你回去嘗試訪問它時,它不在那裏。

經驗法則是:只發布您創建的內容。

+0

謝謝,這是有道理的。你對varOpenPageController有什麼看法,我正在創建,因爲我正確地分配它? – Sean 2008-12-30 20:58:49

2

將視圖控制器推到導航控制器上的第一個示例與版本一致。如果在你回來的時候崩潰了,這可能意味着你在OpenPageViewController的dealloc方法中出了問題,但是導航控制器保留了你的視圖控制器的時候某些地方是錯誤的,你應該確保在你推動之後釋放它(如果你有像您在代碼中一樣分配視圖控制器實例)。