Le but de Synthétiser
Je suis en utilisant un iOS5 livre pour apprendre la programmation iOS.
@synthesize coolWord;
^synthétiser est utilisé pour toutes les propriétés .m fichiers
J'ai entendu dire que dans iOS6, il n'est pas nécessaire pour synthétiser, puisque c'est fait automatiquement pour vous. Est-ce vrai?
Ne synthétiser jouer n'importe quel rôle pour iOS6?
Merci pour la clarification. 🙂
- Question intéressante.
- Ce n'est pas une propriété de l'iOS 6. C'est une propriété de Xcode 4.4. Jetez un oeil à la Objective-C en Fonction de la Disponibilité de l'Index. C'est le “Défaut de synthèse de
@property
les variables d'instance et des méthodes accesseur” caractéristique. - Même si c'est juste une propriété de Xcode, je suppose que vous pouvez toujours le faire pour iOS6 apps bien, non?
Vous devez vous connecter pour publier un commentaire.
@synthétiser en objective-c, juste implémente la propriété setters et getters:
Il est vrai avec Xcode 4 que ce qui est mis en œuvre pour vous (iOS6 nécessite Xcode 4). Techniquement, il met en œuvre
@synthesize coolWord = _coolWord
(_coolWord
est la variable d'instance etcoolWord
est la propriété).Pour accéder à ces propriétés utilisation
self.coolWord
à la fois pour la miseself.coolWord = @"YEAH!";
et seNSLog(@"%@", self.coolWord);
Noter également, le setter et getter peut encore être mis en œuvre manuellement. Si vous implémentez le setter et getter si vous DEVEZ également inclure manuellement
@synthesize coolWord = _coolWord;
(aucune idée de pourquoi il en est).Autosynthesis dans iOS6 nécessite encore
@synthesize
@protocol
.Le second cas peut être vérifiée comme ceci:
Type:
clang -rewrite-objc main.m
et vérifier que la variable est générée. Maintenant ajouter des accesseurs:Type:
clang -rewrite-objc main.m
et vérifier que la variable n'est PAS généré. Donc, pour utiliser le support de la variable dans le accesseurs, vous devez inclure le@synthesize
.Elle peut être liée à cette:
@implementation MyClass { NSInteger _edad; } /* getter & setter here */ @end
clang -rewrite-objc main.m
me donne juste un énorme main.cpp fichier. Il ya quelque chose que j'ai besoin d'inclure à faire de sortie de l'Objective-C?Je ne suis pas sûr de savoir comment
@synthesize
se rapporte à iOS6 mais depuis Xcode 4.0, c'est essentiellement été désapprouvée. Fondamentalement, vous n'en avez pas besoin! Utilisez simplement le@property
déclaration et derrière les coulisses, le compilateur génère pour vous.Voici un exemple:
Tous que le code est pris en charge du compilateur pour vous. Donc si vous avez une applications qui ont
@synthesize
, il est temps de faire du nettoyage.Vous pouvez consulter ma question similaire ici qui pourrait aider à clarifier.
Je crois que
@synthesize
directives sont automatiquement insérés dans le dernier Obj-C compilateur (celui qui est livré avec iOS 6).Le point de @synthétiser pré-iOS 6 est de créer automatiquement des getters et setters pour les variables d'instance, de sorte que
[classInstance getCoolWord]
et[classInstance setCoolWord:(NSString *)aCoolWord]
sont générés. Parce qu'ils sont déclarées avec@property
, vous également profitez de la commodité de la syntaxe à point pour les getter et setter.mais nous pouvons l'utiliser comme
//ce que l'IDE n'en interne
nous utilisons _name pour accéder propriété donnée, mais maintenant vous voulez la synthèse d'une autre façon, comme
prénom, vous pouvez le faire comme
ou tout simplement par le nom de
Automatique de synthèse dans iOS6, il n'est plus nécessaire de déclarer expressément la sauvegarde de ivars ou d'écriture de la @synthétiser déclaration. Lorsque le compilateur trouve un @déclaration de propriété, il le fera à la fois sur notre compte en utilisant les lignes directrices que nous venons d'examiner. Donc, tout ce que nous devons faire est de déclarer une propriété comme ceci:
et dans iOS 6, @synthétiser abc = _abc, sera ajoutée automatiquement au moment de la compilation.