首先,我從未在我的應用程序中看到如此多的內存問題,因爲在閱讀關於內存如何在obj-C中運行的文章後,我開始放置「自我」。現在,我得到各種問題(揭示了我的編碼的sl iness)。當然,我是Objective-C的新手,我承認在我的人生之前,我從未有過很多與內存管理有關的問題。但我認爲這需要習慣才能習慣。UINavigationViewController內存釋放
現在,對我的問題。
我有一個類接口屬性(self.todoCreate),它擁有對上述控制器的引用。通過按下按鈕導航該控制器。
@property (nonatomic, retain) TodoTaskCreateController *todoCreate;
下面的代碼是導致導航視圖改變的片段:
TodoTaskCreateController *viewController = [[TodoTaskCreateController alloc]
initWithNibName:@"TodoTaskCreateController"
bundle:[NSBundle mainBundle]];
self.todoCreate = viewController;
[viewController release];
// slide-in todoCreate controller.
if (self.navigationController != nil && self.todoCreate != nil) {
[self.navigationController pushViewController:self.todoCreate animated:YES];
}
因此,這裏是我的問題:
我第一次運行這個它的工作原理。 一旦我在第二個視圖屏幕上,我回到主視圖。 如果我嘗試再次導航第二次,那麼應用程序崩潰,在self.todoCreate
正在分配viewController
。
請注意,在主視圖的viewDidAppear
方法中,我呼叫[self.todoCreate release]
。
任何人都可以解釋這一點嗎?
PS - 難怪這麼多iPhone應用程序隨機崩潰。
如果你做「自我」。todoCreate =`具有`retain`屬性,舊值將被釋放;如果您對`assign`屬性執行相同的操作,則舊值不會被釋放。 –
2009-08-02 22:02:32