2012-05-24 2 views
0

У меня есть сцена Cocos2d (CCLayer) с CCMenu. Я реализовать dealloc какcocos2d scene 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

Я думаю, вам нужно установить меню в nil THEN, отпустите его, это может быть ваша проблема. И чтобы ответить на ваш второй вопрос, вы определенно должны называть [super dealloc] или это может вызвать больше проблем.

+0

Извините, что я смотрю http: //www.raywenderlich .com/2657/memory-management-in-objective-c-tutorial, и он выпускает THEN nil, поэтому я считаю, что это правильно. К сожалению, в последнее время я использовал ARC для всех своих проектов. Но позвоните [super dealloc]; – RachelC

+0

Вы правы. Это была проблема. Спасибо – pbaris

+6

Настройка на nil и THEN релиз ничего не выпускает, почему? Потому что вы отправляете сообщение о выпуске в nil, что ничего не делает. Вероятно, проблема заключается в том, что @pbaris никогда не сохранял или не копировал меню, поэтому он выпускает объект без права собственности на него. – EmilioPelaez

2

Если вы создали menu с [CCMenu menuWithItems:...], вам не нужно его выпускать в dealloc, потому что он не был сохранен.

Смежные вопросы