J'ai l'habitude de voir cette question posée dans l'autre sens, comme iOS: doit, chaque iVar vraiment bien? (et j'aime bbum est pour répondre à cette Q).
J'utilise les propriétés presque exclusivement dans mon code. Chaque si souvent, cependant, je travail avec un entrepreneur qui a été en développement sur iOS pour une longue période et est un jeu traditionnel programmeur. Il écrit le code qui déclare presque pas de propriétés que ce soit, et se penche sur ivars. Je suppose qu'il fait cela parce que 1.) il est utilisé depuis les propriétés n'étaient pas toujours d'exister jusqu'à ce que Objective-C 2.0 (Oct 07) 2.) pour un minimum de gain de performance de ne passant pas par un getter / setter.
Alors qu'il écrit le code qui n'a pas de fuite, je préfère encore lui d'utiliser les propriétés de plus de ivars. Nous en avons parlé et il a plus ou moins voit pas de raison d'utiliser les biens, puisque nous n'étions pas à l'aide de KVO et il a expérimenté avec prendre soin des problèmes de mémoire.
Ma question est plus... Pourquoi voudriez-vous jamais eu envie d'utiliser un ivar période expérimentés ou non. Est-il vraiment que beaucoup d'une différence de performance que l'utilisation d'un ivar serait-elle justifiée?
Aussi comme un point de clarification, je remplace les setters et getters que de besoin et d'utiliser le ivar, qui est en corrélation avec celle de la propriété à l'intérieur du getter / setter. Cependant, en dehors d'un getter / setter ou init, j'ai toujours utiliser l' self.myProperty
de la syntaxe.
Edit 1
J'apprécie toutes les bonnes réponses. Celui que je voudrais aborder qui semble incorrect, c'est qu'avec un ivar vous obtenez l'encapsulation où avec une propriété que vous ne le faites pas. Il suffit de définir la propriété dans une classe de continuation. Cela permet de masquer la propriété des étrangers. Vous pouvez également déclarer la propriété readonly dans l'interface et de la redéfinir comme readwrite dans la mise en œuvre comme:
// readonly for outsiders
@property (nonatomic, copy, readonly) NSString * name;
et ont dans la classe de continuation:
// readwrite within this file
@property (nonatomic, copy) NSString * name;
Pour l'avoir complètement "privés" seule de le déclarer dans la classe de continuation.