Resold!被稱爲兩次的Dealloc?
感謝Lone Gunman,這個問題是由於在發佈它們之前沒有將許多代表設置爲零的疏忽。
這是一個奇怪的...我熟悉基本的內存管理,但我認爲我看到的東西是不尋常的。這裏是一個小背景...
我有一個NavigationController,處理以下ViewControllers之間導航:
首頁 - >遊戲 - >遊戲
運行代碼時離開時摔倒遊戲。內GameViewController有一個類似於dealloc方法:
- (void)dealloc
{
[board release];
[opponentsViewController release];
[instructionsViewController release];
[imgPicker release];
[gameView release];
[super dealloc];
}
當導航控制器返回到遊戲列表(從遊戲中),它拋出一個EXC_BAD_ACCESS。所以我提出了我可靠的剖析器並檢查殭屍。唉,就像我預料的那樣,一條消息正在發送到一個釋放對象!進一步挖掘我發現那裏是在對象的歷史記錄3項:
- 局取得alloc'd(通過遊戲的init方法調用)
- 局得到釋放(通過遊戲的dealloc方法調用)
- 局之中Zombie'd(由Game的dealloc方法調用)
這兩個調用2和3都是從UINavigationController setDisappearingViewController中調用的。
在我的dealloc方法中,我爲每個釋放調用設置了斷點,這時會發生[board release]調用,然後發生[opponentsViewController release]調用,然後再次發生[board release]調用。所以我看到dealloc方法沒有完成並再次調用。
什麼可能導致這種情況?
編輯:這是GameViewController Implementation
從遊戲控制器代碼,增加了本場比賽:
-(void) gotoGame:(int)tag {
game = [[GameViewController alloc] init];
[self.navigationController pushViewController:game animated:YES];
[game release];
}
編輯:這是GameViewController Header
' - [NSObject dealloc]'不能執行兩次。如果您在構建設置中啓用「運行靜態分析器」並嘗試再次構建,您會遇到什麼問題? – 2011-06-26 16:01:25
當您多次調用發佈時會發生這種情況。你能檢查你沒有在程序的其他任何地方發佈主板嗎?> – sumderungHAY
@ WTP:沒有來自靜態分析器的投訴。 – Brent