bon instanciation & gestion de la mémoire dans cocos2d-x
-
13-12-2019 - |
Question
J'ai été chercher de la documentation pour cocos2d-x, mais il semble être vraiment, vraiment pauvres, au-delà des principes de base.Je comprends que mes classes, devrait hériter de CCObject
pour pouvoir l'utiliser (à l'origine du cacao) retain
/release
mécanisme, mais je suis toujours confus au sujet de ce qui se passe quand vous new
quelque chose. init
n'est pas appelé automatiquement.est-il OK pour appeler de l'intérieur, le constructeur?n'est que la seule garantie que mon objet sera de commencer avec un compte de référence de 1?qu'est-ce que CC_SAFE_DELETE
et quand dois-je utiliser?faire release
et autorelease
fonctionne exactement comme dans le cacao?ce sujet CC_SYNTHESIZE
?J'ai juste besoin de voir un correctement codé exemple de classe (et c'est l'instanciation/destruction) de comprendre ce que je suis censé faire, afin de ne pas de vis et de laisser les fuites de mémoire.je vous remercie.
La solution
Si vous regardez le code de CCObject classe, vous verrez que c'est le constructeur compte de référence est défini à 1, il s'.Ainsi, la création d'un objet avec new
est correcte.Init est pas appelé car CCObject classe n'a pas une telle méthode.Habituellement, je préfère de créer des objets à l'aide de constructeur statique.Qch comme
MyClass* MyClass::createInstance()
{
MyClass* object = new MyClass();
// you can create virtual init method
// and call it here
if( initWasSuccessful )
{
object->autorelease();
}
else
{
CC_SAFE_RELEASE_NULL(object);
}
return object;
}
Sur tous des macros comme CC_SAFE_DELETE - vous pouvez les trouver dans le code de cocos2dx.Cette macros juste vérifier si l'objet est NULL pour éviter l'écrasement sur essaie d'appeler la méthode release.
Autres conseils
La réponse fournie par Morion est grand, je voudrais juste ajouter quelques liens utiles à propos de cette question.
Ici vous pouvez trouver les officiels de gestion de la mémoire dans Cocos2d-x page:Gestion de la mémoire dans Cocos2d-x
Cette page du forum contient également un peu plus de détails et de précisions à ce sujet:Libération mémoire de Cocos2d-x
Profitez de codage!