2010-09-13 6 views
4

Si je suis en utilisant les propriétés de synthèse, alors pourquoi pas je dis simplement:self.prop = nil; vs. [libération de prop], prop = nil;

self.property = nil; 

Cela libérera le nombre de ref, et assurez-vous que je n'ai pas un pointeur ballants.

semble simple, et pourtant 99% du code que je vois semble le faire de cette façon:

[property release]; 
property = nil; 

et oui, dans la plupart des cas, ils sont des propriétés. J'ai l'horrible sensation de manquer quelque chose? Sorta comme quand j'ai oublié de mettre "soi". en face de certaines des propriétés et se demandait pourquoi il s'écrase :-)

Répondre

9

Si vous essayez d'effacer la valeur d'une propriété n'importe où mais dans une méthode dealloc, alors self.property = nil; est la meilleure façon de le faire. Il va gérer toutes les tâches de gestion de la mémoire pour vous, en aidant à prévenir les problèmes.

Si vous êtes dans la méthode dealloc, que la meilleure façon de libérer cette Ivar est pour le débat, mais [property release]; tend à recommander, car appeler self.property peut avoir des effets secondaires. Dans la méthode dealloc, l'appel property = nil; n'est pas nécessaire.

+4

Avec une mise en garde; 'self.property = nil;' déclenchera tous les observateurs KV alors que l'accès direct ne le fera pas. D'une façon ou d'une autre, cela fonctionne, mais ce qui est approprié est une question d'opinion. – bbum

+0

Cela dépend aussi du résultat souhaité. Parfois, vous voulez que ces observateurs tirent, parfois vous voulez les contourner. – kubi