2012-05-24 129 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中释放它,因为它尚未保留。