2012-06-13 2 views
0

Je reçois la ligne suivante comme une fuite dans Xcode:Gestion correcte de la mémoire pour cette ligne? (Cocos2D)

someSprite = [[CCSprite alloc] initWithFile:(NSString*)obj]; 

Je sais que je n'alloc là mais je pensais que Cocos2D a traité toute la gestion de la mémoire. Quoi qu'il en soit, comment dois-je gérer correctement cette ligne afin qu'il n'y ait pas de fuite?

Faut-il simplement utiliser autorelease ou y at-il autre chose?

Merci! Cocos2D ne gère pas la mémoire pour vous.

+0

Si vous utilisez ARC, ce code serait un OK. – LearnCocos2D

Répondre

1

habituellement, il est plus préférable d'utiliser des constructeurs statiques qui retournent des objets auto-libérés. Pour votre cas, il sera

[CCSprite spriteWithFile:(NSString*)obj]; 

sera conservé lorsque vous l'ajoutez à tout parent

2

Cependant, je pense que vous pouvez utiliser le comptage automatique des références (ARC, Automatic Reference Counting) pour vous débarrasser de la gestion de la mémoire. Vous avez ensuite utiliser Cocos2d comme une bibliothèque statique puisque cocos2d ne supporte pas ARC.

Si vous voulez résoudre votre problème sans ARC, insérez simplement une autorelease. S'il s'agit d'une variable d'instance, libérez-la dans votre méthode dealloc à la place.

+0

J'ai d'abord pensé que Cocos2d gérait la mémoire pour moi, mais ce n'est pas le cas. Il libère cependant tous les enfants (couches, sprites) qui sont ajoutés à la scène. Et puisque la plupart des objets sont souvent une sorte d'enfant, vous n'avez souvent pas besoin de prendre soin de la mémoire. – Sunkas

+0

Pour activer ARC dans un projet cocos2d, suivez ces instructions: http://www.learn-cocos2d.com/2012/04/enabling-arc-cocos2d-project-howto-stepbystep-tutorialguide/ Ou utilisez simplement Kobold2D (http: //www.kobold2d.com) qui a ARC activé dans tous les projets. – LearnCocos2D