2011-06-15 2 views
1

Je pense que mon programme fuit la mémoire dans la dernière ligne de cette boucle mais je ne vois pas pourquoi il devrait. Je n'appelle pas alloc. Quelqu'un peut-il expliquer cela? Je sais que ce pourrait être une réponse vraiment évidente mais je commence juste avec l'objectif C. Est-ce juste que l'appel numberWithInt ajoute un +1 ou quelque chose? Mercifuite de mémoire de numberWithInt?

for (int k=0; k<=27; k++) { 
    NSNumber *zero= [NSNumber numberWithInt:0]; 
    [randomUsed insertObject:zero atIndex:k]; 
    [alphaKeys insertObject:zero atIndex:k]; 
} 
+3

Cet extrait ne fait rien de mal, à moins qu'il ne dispose pas d'un pool autorelease autour pour une raison quelconque. Pourquoi pensez-vous que la source de la fuite est là? –

Répondre

1

Le code que vous avez ici n'a aucune fuite.

Vous devez penser en termes de propriété. Vous ne possédez pas zero ici puisqu'il n'a pas été retourné d'un alloc ou new. Puisque vous ne le possédez pas, vous n'avez pas besoin de release.

Ce que vous pensez est que insertObject: augmente le retainCount, ce qui est vrai. Lorsque vous insérez zero dans vos tableaux, randomUsed et alphaKeys conserve votre objet zéro. Dans ce cas, ce sont les tableaux qui le possèdent, pas vous. Ils besoin de le libérer, pas vous.

S'il y a une fuite, c'est le tableau qui fuit, pas votre objet zero.

Veuillez examiner le cocoa memory management guide.