2012-05-24 4 views
0

J'ai une scène Cocos2d (CCLayer) avec un menu CCMenu. Je mets en œuvre la dealloc commecocos2d scene dealloc

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

    [super dealloc]; 
} 

quand j'utilise directeur partagé pour remplacer la scène avec un autre, il charge la deuxième scène, puis plantage du programme dans dealloc, en particulier dans

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

L'appel à remplacer la scène est

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

Pourquoi cela se produit-il? Dois-je appeler [super dealloc] ou non?

+0

Vous devriez vraiment utiliser ARC pour de nouveaux projets. Voici comment l'activer pour cocos2d: http://www.learn-cocos2d.com/2012/04/enabling-arc-cocos2d-project-howto-stepbystep-tutorialguide/ – LearnCocos2D

Répondre

0

Je pense que vous devez définir le menu à zéro alors relâchez-le, c'est peut-être votre problème. Et pour répondre à votre deuxième question oui, vous devriez absolument appeler [super dealloc] ou cela pourrait causer plus de problèmes.

+0

Désolé de regarder http: //www.raywenderlich .com/2657/gestion de la mémoire-dans-objectif-c-tutoriel et il libère THEN nil alors je crois que vous avez raison. Désolé d'utiliser ARC pour tous mes projets récents. Mais appelez [super dealloc]; – RachelC

+0

Vous avez raison. C'était le problème. Merci – pbaris

+6

Mettre à zéro et puis libérer ne libère rien, pourquoi? Parce que vous envoyez un message de libération à zéro, ce qui ne fait rien. Ce qui est probablement le problème est que @pbaris n'a jamais retenu ou copié le menu, donc il libère un objet sans en avoir la propriété. – EmilioPelaez

2

Si vous avez créé menu avec [CCMenu menuWithItems:...], vous n'avez pas besoin de le libérer dans dealloc, car il n'a pas été conservé.

Questions connexes