2012-05-24 158 views
0

我有一個CCMenu的Cocos2d場景(CCLayer)。我實現的dealloc作爲cocos2d場景dealloc

- (void) dealloc { 
    [menu release]; 
    menu = nil; 

    [super dealloc]; 
} 

當我使用共享主任與其他更換的場景,它加載的dealloc第二場景,然後程序崩潰,尤其是在

[super dealloc]; //Thread1: Program received signal: "EXC_BAD_ACCESS". 

調用替換現場是

[[CCDirector sharedDirector] replaceScene: 
    [CCTransitionFade transitionWithDuration:0.5f scene:[SomeOtherScene scene]]]; 

爲什麼會發生這種情況?我應該叫[super dealloc]還是不?

+0

你應該真的在新項目中使用ARC。以下是如何爲cocos2d啓用它:http://www.learn-cocos2d.com/2012/04/enabling-arc-cocos2d-project-howto-stepbystep-tutorialguide/ – LearnCocos2D

回答

0

我認爲你需要設置菜單爲零然後釋放它,這可能是你的問題。並回答你的第二個問題是,你肯定應該打電話給[super dealloc],否則可能會導致更多問題。

+0

對不起,我正在查看http://www.raywenderlich .com/2657/memory-management-in-objective-c-tutorial,他會釋放THEN nil,所以我相信你是正確的。對不起,我最近一直在爲我的所有項目使用ARC。但是請打電話給[super dealloc]; – RachelC

+0

你說得對。這是問題所在。謝謝 – pbaris

+6

設置爲零,然後釋放不釋放任何東西,爲什麼?因爲你發送一條釋放消息給nil,它什麼都不做。可能問題是@pbaris從不保留或複製菜單,所以他釋放了一個對象而沒有它的所有權。 – EmilioPelaez

2

如果您使用[CCMenu menuWithItems:...]創建了menu,則無需在dealloc中釋放它,因爲它尚未保留。