2010-10-03 3 views
1

J'utilise un fichier .xib pour ma disposition de viewController et j'ai 10 objets IBOutlet utilisés par IB, aucun d'entre eux n'a de @properties leur est assignée (pas de @property (retenez) IBOutlet ...). Quand je libère le viewController aucun de ces objets n'est libéré, je dois les libérer manuellement dans le dealloc du viewController.Lorsque j'utilise un fichier .xib pour mettre en page mon viewController IBOutlets ne sont pas libérés lorsque le contrôleur de vue est libéré

Cela ne semble pas être un comportement normal, je pensais que ces objets seraient libérés par le système puisque IB est ce qui les assignait, que pouvais-je faire de mal?

Répondre

1

Apple Memory Management Programming Guide vous indique exactement comment properly release IBOutlets. En bref, vous êtes censé les libérer dans dealloc, mais vous souhaitez également les libérer dans viewDidUnload.

+0

Ah, est ce nouveau comportement dans 4.x maintenant que nous avons un viewDidUnload et il était juste utilisé pour le gérer dans 3.x? – Shizam

+0

Ils sont assignés à vos ivars, vous les possédez donc vous devez les libérer. * Cela a toujours été le cas. * Dans le passé, Leaks ne détectait pas certains types d'ordures (il ne détecterait jamais une fuite de UIImageView); peut-être qu'ils ont réparé cela. Je recommande fortement d'utiliser les propriétés et d'utiliser 'self.foo = nil' à la place; Je grince des dents quand je vois du code qui libère des ivars sans les mettre à zéro. –

+0

Merci, et accepté de re: mettre les choses à zéro. – Shizam

Questions connexes