Vous absolument devez lire et comprendre le Cocoa Memory Management Rules, en particulier la règle fondamentale qui stipule:
Vous prenez possession d'un objet si vous le créez à l'aide d'une méthode dont le nom commence par "alloc" ou "new" ou contient "copy" (par exemple, alloc, newObject ou mutableCopy), ou si vous lui envoyez un n message. Vous êtes responsable de renoncer à la propriété des objets que vous possédez en utilisant la libération ou autorelease. Toute autre fois que vous recevez un objet, vous devez et non le libérer.
Maintenant, regardez comment vous avez trouvé un tableau. Vous avez utilisé la méthode objectForKey: Elle ne commence pas par alloc, ni new, ni par copy. Vous n'avez pas non plus conservé un tableau. Par conséquent, vous ne possédez pas anArray. Vous ne devez pas le libérer.
La règle citée ci-dessus est la chose la plus importante à savoir sur la programmation avec Cocoa sur iPhone ou Mac sans récupération de place. Une des autres affiches ici est venu avec l'acronyme NARC (New Alloc Retain Copy) comme un aide-mémoire qui est assez pratique.
Appliquons la règle à la variable appelée obj dans votre code. Vous l'avez obtenu avec un appel à alloc, vous êtes donc responsable de le libérer. Cependant, vous l'avez ensuite obtenu (en écrasant la valeur précédente) avec un appel à objectForIndex: après cela, vous ne devez pas le libérer. Cependant, la première valeur a dû être libérée et a maintenant fui. en fait, la ligne alloc est inutile.
Ce que JeremyP a dit.Cependant, vous allouez aussi inutilement une instance de 'AnObject', puis vous la falsifiez sur la ligne suivante. – bbum