2010-07-20 6 views
2

Je ne comprends pas pourquoi Instruments/Leaks me dit qu'il y a une fuite de mémoire dans mon viewDidLoad. Je libère les deux objets dans dealoc et je les mets à zéro dans viewDidUnload. Quelqu'un peut-il me donner une idée ici?Pourquoi ai-je une fuite de mémoire ici?

Lien vers écran vidage des instruments: http://i26.tinypic.com/28227iw.png

BR // Christoffer

+1

Je ne sais pas si Instrumens a une telle intelligence, mais l'instruction if contient seulement les listOfItems et non les paymentMethods. Est-il possible que listOfItems soit null mais pas les Paymentmethods? Si oui, ce serait une fuite, mais comme je l'ai dit, je ne suis pas sûr si l'analyse instrumens de cette façon je l'ai fait aussi. – HerrVoennchen

+0

Ceci est la réponse. Si paymentMethods n'est pas nul et que listOfItems est nul, il suffit d'écraser la valeur de paymentMethods et de perdre la référence au tableau. D'où la fuite. – Costique

+0

Oui, c'est correct. En outre, l'instruction if est redondante. Vous pouvez simplement envoyer le message de libération. Si c'est déjà nul, vous envoyez un message à zéro et rien ne se passera. – Rengers

Répondre

1

je libérer les deux objets dans dealoc et les mettre à zéro en viewDidUnload

je pourrais être mal compris le grammaire de la phrase, mais vous devriez libérer et mis à zéro dans à la fois dealloc et viewDidUnload.

En règle générale, vous devriez toujours relâcher et mettre à zéro en tant que paire, sauf si vous avez une raison particulière de ne pas le faire.

+0

Sans mentionner que le simple fait de libérer un objet sans lui attribuer de référence est tout simplement dangereux. – Costique

+0

Merci pour vos réponses. Je vois l'erreur/les failles dans le code que vous pointez et les corrige. Mais le résultat est le même. Alors, comment cela devrait-il être implémenté si vous voulez initialiser des objets de classe chaque fois que la vue se charge? – Christofffer

+0

Vous devez les libérer dans viewUnload et les créer dans viewLoad – Akusete