我有一個方法,一個奇怪的問題被稱爲每次按下按鈕時:請幫助:UINavigationController的和視圖控制器內存管理
- (void)launcherView:(TTLauncherView*)lnchr didSelectItem:(TTLauncherItem*)itm {
MyObject* obj = ...
MyViewController* detailView = [[MyViewController alloc] init]; // line A
[self.navigationController pushViewController:detailView animated:YES];
[detailView setObject:obj];
detailView = nil; // should I also release it? -- line B
}
的問題是,我道歉,我不得不釋放的DetailView(內存工具顯示我我有一個內存泄漏是它沒有完成),也因爲navigationController應該保留我的detailView,但如果我嘗試添加autorelease行「A」或行「B」,或簡單地發佈detailView排行「B」(當然在將它分配給nil之前),程序崩潰時會發送EXC_BAD_ACCESS原因釋放消息發送到釋放實例[CALayer] ...
有什麼想法? 非常感謝
[detailView setObject:obj];將MyViewController的視圖標籤標題設置爲MyObject屬性。我已經瞭解到,在試圖設置標籤&Co.之前,我必須顯示我的基於NIB的視圖,否則我的IBOutlet控制器中的標籤屬性被setObject方法找到爲零,因此setObject變得毫無用處......是不是真的? – 2011-03-25 16:39:19
我已經按照你的建議進行了嘗試,但它不會崩潰......所以,崩潰似乎取決於[detailView setObject:obj]調用! 但我必須設置我的IBOutlet的屬性後推視圖控制器,否則所有的IBOutlets將零,不是嗎? 我在MyViewController中的setObject上的當前實現釋放以前保留的obj,然後保留obj,然後相應地設置IBOutlet的屬性(標題)。啊,「obj」是Core Data的一個ManagedObject。 – 2011-03-25 17:18:53
我的錯誤,時間浪費的時間! :)謝謝你的回答:我在我的setObject方法中發現了一個不正確的對象釋放。非常感謝,再次抱歉。 – 2011-03-25 17:49:33