2010-06-30 4 views
4

Ceci est une version simplifiée du problème auquel je suis confronté maintenant. J'ai fait 2 CCScene 1 vide 0 & 2 et ajouté CCLayer 1 & 2 sur leur scène respective. J'ai également ajouté une fonction tactile pour passer de la scène 1 à la scène 2 en utilisant la fonction replaceCene de CCDirector. Cependant, dealloc n'a jamais été appelé pendant la scène de remplacement. En outre, le NSLog a signalé que le taux de rétention de la couche était de 2 lorsque je touche l'écran. Est-ce même supposé se produire? Quelqu'un peut-il probablement me dire ce que j'ai fait de mal ou est-ce juste mon malentendu que retainCount doit être 0 avant l'appel de dealloc?Cocos2d-iphone, ne pas appeler dealloc lors du remplacement de la scène

Ce problème provoque le crash de mon programme de jeu principal en basculant entre différentes scènes/calques avec des sprites statiques (et quelques actions mineures) encore et encore.

+0

astuce: utilisez autorelease et vous épargner beaucoup de problèmes avec la gestion de la mémoire! – LearnCocos2D

Répondre

2

Je ne suis pas bien informé sur le contrat de cocos2d mais ne devrait pas relâcher la SecScene vous alloc dans ccTouchesBegan sur cette ligne: [[CCDirector sharedDirector] replaceScene:[[SecScene alloc]init]]

Je ne vois aucune raison pour laquelle replaceScene ne serait pas retenir, maintenant le SecScene a un nombre de retenue de deux quand il devrait en avoir un. Plus important encore, si vous avez ajouté MainScene d'une manière similaire à celle qui expliquerait pourquoi son nombre de rétention est supérieur à ce que vous souhaiteriez qu'il soit, il ne sera jamais désalloué.

0

En outre, le dealloc ne reçoit que rarement appelé je l'ai trouvé - il est donc difficile de tester et d'obtenir invoqué ...

+1

dans ce cas vous risquez fort de perdre de la mémoire en ne faisant pas correspondre alloc/release ... ce n'est pas la faute de la méthode dealloc, c'est quoi, quand et où vous allouez/retenez/libérez ça fait que dealloc ne soit pas appelé – LearnCocos2D

Questions connexes