Je fais un jeu iPhone. Je veux libérer tous les objets qui ont été alloués ou conservés. Dans la fonction dealloc
, je libère tous ces objets, mais ensuite j'ai réalisé que parfois je finis par relâcher des objets quand ils n'ont pas encore été attribués. Donc j'ai pensé que je dois vérifier si son retainCount
est supérieur à zéro ou pas avant de le libérer.Combien de fois puis-je libérer un objet alloué ou conservé?
Ma question est:
-je vérifier que si le retainCount
est supérieur à zéro, puis le relâcher?
if([bg retainCount]!=0)
{
[bg release];
}
, ou
Dois-je libérer autant de fois que son retainCount
while([bg retainCount]!=0)
{
[bg release];
}
Merci pour votre aide!
Le 'retainCount' de n'importe quel objet est ** aucun de vos affaires **. Il est là comme une aide au débogage, mais rien de plus. Le code de production ne devrait jamais en dépendre. – Sven
BTW - pas que cela rend le code correct - mais, par définition, 'retainCount' ne peut jamais retourner 0 parce que l'objet a déjà été libéré par le temps qu'il se passe ..... – bbum
Aussi, essayez d'utiliser" Build & Analyser "(c'est-à-dire l'analyseur Clang). Cela pourrait vous indiquer où vous allez mal. –