2010-10-05 6 views
0

Je rencontre de réels problèmes pour savoir pourquoi mon UIView ne se désengage pas.UIView étant conservé

J'ai un UIViewController avec plusieurs UIViews, qui sont toutes des propriétés IBOutlet qui sont conservées.

Je suis sûr de libérer l'UIView dans la méthode dealloc du UIViewController. Cependant le dealloc de mon UIView n'est jamais appelé. Je n'ai aucune idée de quoi d'autre a retenu l'UIView.

Tous les autres UIView dans mon UIViewController dealloc bien, juste celui-ci ne le fait pas.

Est-ce que quelqu'un a de bonnes techniques pour trouver ce qui pourrait être responsable de cela?

Cordialement, Rich

Répondre

2

Je commencerais par aller dans l'application des instruments et sélectionner le profil "leaks". Choisissez votre application et exécutez-la pour détecter les fuites.

Lorsqu'il détecte votre fuite, cliquez sur l'indicateur de détail en fonction de l'adresse mémoire de l'objet qui a fui (votre UIView). Ici vous verrez votre UIView alloué, conservé et libéré et quel appel de fonction l'a fait.

Il existe une bonne vidéo WWDC intitulée "Session 311 - Analyse avancée de la mémoire avec des instruments" si vous voulez regarder cela, ils vont au-dessus en profondeur.

1

Assurez-vous de lire Memory Management of Nib Objects du Guide de programmation de gestion de la mémoire d'Apple. Il décrit comment déclarer correctement les IBOutlets et quand et comment les publier dans le contrôleur de vue.

Version courte: vous devez définir la propriété IBOutlet sur ViewDidUnload. Si cela ne vous aide pas, vous pouvez essayer de lancer l'outil Leaks Instruments et voir s'il peut détecter votre fuite.

+0

Merci, je vais vérifier. –