所以是的,我是一個在這個瘋狂的iPhone世界中的Java人。當談到記憶管理時,我對自己在做什麼沒有很好的想法。如何通過導航控制器管理UIViewControllers?
我有一個使用導航控制器,當它的時間去到下一個視圖我有一些代碼,看起來像這樣的應用程序:
UIViewController *myController = [[MyViewController alloc] initWithNibName:@"MyView"
bundle:[NSBundle mainBundle];
[[self navigationController] pushViewController:myController animated:YES];
現在根據蘋果的內存管理
基本規則如果使用名稱以「黃金」或「新」,或包含「複製」(例如,
alloc
,newObject
,或mutableCopy
),或者如果您發送的方法創建你需要一個對象的所有權它是一個retain
消息。您有責任放棄使用release
或autorelease
所擁有的物品的所有權。任何其他時間你收到一個對象,你不能釋放它。
對我來說,這意味着我應該釋放myController
,或給它一個autorelease
消息。但是,每當我嘗試這樣做的時候,我的應用程序在我將視圖從堆棧中彈出並彈出時就會崩潰。
這聽起來沒有什麼味道,但在運行儀器時聲稱我沒有任何內存泄漏。
所以我我的問題是
- 我這樣做對嗎?
- 導航控制器是否取得了MyViewController的所有權,解釋了內存泄漏的缺失?
- 我應該將myController分配給我的根ViewController中的實例變量嗎?在這種情況下,它會被標記保留,我會在根的dealloc方法
我只是對比autorelease和release的使用。你可以在之前或之後自動釋放,沒關係,但是如果你釋放,你必須在之後執行。 – 2008-11-26 19:53:31