Dois-je déclarer des variables dans l'interface ou à l'aide de la propriété en objective-c d'arc?
approche 1:
@interface MyController : UIViewController {
UILabel *myText;
}
@property (nonatomic, strong) UILabel *myText;
approche 2:
@interface MyController : UIViewController
@property (nonatomic, strong) UILabel *myText;
approche 3:
@interface MyController : UIViewController {
UILabel *myText;
}
J'ai lu quelques articles parlant de ce genre de trucs mais je n'ai pas encore vraiment rendu compte de l'approche que j'ai à adopter.
J'ai aussi trouvé que quelqu'un a dit que la méthode 1 est une vieille façon donc je voudrais savoir quelle est la meilleure pratique pour le sdk ios 6 à l'aide de l'ARC.
Je sais que de déclarer des variables en utilisant la propriété est un moyen facile pour générer des getter et setter et quelqu'un a suggéré de l'utiliser. Cependant, je voudrais demander, dans le cas d'une variable n'est pas pour l'appel par une autre classe, est-il nécessaire que la variable à l'aide de la propriété? et le définir comme variable privée à l'intérieur de l'interface? Ou est-il préférable pour une variable uniquement de déclarer à l'intérieur de l'interface? Je voudrais apprendre les meilleures pratiques, de sorte s'il vous plaît pardonnez-moi si c'est une question stupide.
En outre, certains développeurs d'écrire @synthétiser de cette façon
@synthesize myText=_myText;
mais certains écrivent ceci:
@synthesize myText;
Je voudrais également connaître la différence et lequel est préférable?
Merci beaucoup!
- tous vos synthétiser les approches et pas de synthétiser dans les dernières versions de XCode propriété connect ivar nommé _myText, de ne pas myText
Vous devez vous connecter pour publier un commentaire.
La plus moderne1:
1 de Xcode 4.5.2. La plupart de ceci s'applique à 4,4, certains de il ne compile pas sur 4.2 (la dernière version disponible sous Snow Leopard). C'est préprocesseur choses, il est compatible avec tous les modèles ont au moins pour iOS5 (je n'ai pas testé sur iOS4, mais qui devrait également être OK).
2 Il n'y a pas de point dans la déclaration d'une iVar ainsi que une propriété. Je suis sûr qu'il y a un peu obscur cas où vous souhaitez déclarer iVars au lieu de propriétés, mais je ne peux pas penser à tout.
3 Xcode va créer un iVar avec le même nom que la propriété, précédée par une _ blanc souligné. Si vous (rarement) besoin d'un autre genre de comportement, vous pouvez manuellement
@synthesize property = someOtherName
. @vikingosegundo nous relie à cet article sur la dynamique ivars, qui est un cas d'utilisation pour@synthesize
. @RobNapier commentaires que vous ne besoin de@synthesize iVar = _iVar
(bizarrement) si vous créez votre propre getters (readonly) et les setters (lecture/écriture) pour un bien, comme dans ce cas, le préprocesseur ne générera pas de la iVar pour vous.4 La règle générale avec votre interface: garder le plus vide possible. Vous n'avez pas besoin de déclarer votre méthodes maintenant, si elles le sont pour un usage privé. Si vous pouvez obtenir le code pour fonctionner sans une déclaration d'interface, c'est le chemin à parcourir.
5 C'est un @bloc d'interface dans votre .m fichier, placé au-dessus de votre @mise en œuvre:
@synthesize
n'est plus nécessaire (Xcode 4.5+), le compilateur sait pour générer les getters et setters sans elle. Vous n'avez pas besoin de générer manuellement ou@synthesize
.@synthesize
cas, j'ai élargi la réponse. Aussi oui - je ne pas utiliser les accesseurs en inits et deallocs. Je ne voulais pas le détail que dans la réponse, même si, comme la question était de savoir quand utiliser les propriétés, pas quand utiliser des accesseurs. Il semble y avoir beaucoup de confusion flottant autour de ces questions, j'ai donc été en espérant pour fournir une simple réponse. Grand livre, btw!_
se distingue en examen comme "vous devez examiner soigneusement cet accès." Un programme qui est légèrement plus rapide mais buggy n'est pas un bon compromis.Vous pouvez également utiliser @synthétiser si vous aimez une belle table des matières de votre @synthétisé propriétés que vous pouvez consulter et commenter pour plus de clarté et d'organisation.
Aussi, un @synthétiser vous permet de définir un point d'arrêt sur la propriété et le piège lorsque sa valeur est modifiée.
Lorsque le compilateur fait tout pour vous, vous finissez par être éloigné de ce qui se passe vraiment et ignorants pour elle. Toutefois, ne pas avoir à taper tout vous-même de tous les temps est aussi belle.