2010-11-25 78 views

Répondre

0

Il est OK pour envoyer des messages à zéro, vous devez simplement libérer vos conserver les propriétés en dealloc peu importe quoi. Si la propriété n'a pas été utilisée, elle sera nulle et l'envoi de la propriété est effectivement un non-op.

+0

J'ai vu dans quelques exemples en ligne le code suivant - if (iVar! = Nil) [iVar release]; où iVar est également une propriété conservée. Y a-t-il une raison pour la déclaration if? – Glynton

+0

@Glynton: Non. C'est juste une perte de temps. 'nil' est documenté pour pouvoir recevoir des messages. Il ne fait rien sauf retourner 0/nul. – JeremyP

2

Vous devez libérer tous les objets que vous allouez ou retenez dans dealloc. S'il est référencé dans le constructeur de l'interface, vous devrez également le libérer et le mettre à zéro dans viewDidUnload() de votre contrôleur de vue, ainsi que libérer dans votre dealloc.

+0

Ce n'est pas seulement une bonne pratique, c'est ce que vous êtes censé faire. –

0

Vous n'avez pas besoin d'appeler la validation sur une propriété conservée. La méthode setter est implémentée de sorte que lui donner une valeur nulle la libère pour vous. Dans la méthode dealloc vient de mettre à zéro:

self.someProperty = nil; 
+0

Il y a un risque avec cette approche; si quelque chose observe toujours 'someProperty', il recevra une notification de changement pendant le' dealloc' de l'objet où l'état est à peu près garanti non défini. – bbum

+0

De même si someProperty est substituée dans une sous-classe. – JeremyP