Duplicaté possible: strong>
Comment un soulignez-vous devant une variable dans un travail de classe Cocoa Objective-C? P>J'ai été très confus avec l'utilisation de soi-même ou de la sous-traitance avec un nom de variable après la synthétisation comme ci-dessous: P>
xxx pré> basé sur mes compréhensions lorsque j'utilise
auto.utilisateur code>, OS veillera à libérer la mémoire allouée précédemment dans la méthode définie afin de ne pas avoir besoin de prendre soin explicitement. p>
_USERS code> est une variable d'instance pour les utilisateurs et devrait être normalement utilisé tout en accédant à la variable des utilisateurs. Si j'utilise
_USERS code> pour modifier sa valeur, il ne tirera pas de délégué kvo qui n'en informera pas une classe d'observation de la valeur des utilisateurs change. P>
d'ailleurs,
auto -.utilisateur permet de différencier la variable manneule dans le nom de la méthode comme ci-dessous, P>
- (void)assignUsers:(NSMutableArray*)users { self.users = users; }
3 Réponses :
Lorsque vous utilisez le Lorsque vous utilisez le Voici une bonne démonstration de celui-ci: p> auto.utilisateur code>, vous accédez à la propriété via le Setter ou Getter.
_USERS code>, vous accédez à la propriété. Ignorer directement le Setter ou Getter. P>
- (void)setUsers:(id)users {
_users = users; // GOOD : set your property correctly
}
Cher Down-Voteurs B>! J'aurais été honoré d'avoir des commentaires sur la raison pour laquelle vos mains tremblaient au-dessus du bouton d'électeur du bas, car - vous croyez ou non - je ne suis pas un lecteur d'esprit de le comprendre. Merci!
Je ne suis pas sûr du tout comment vous pensez que: "Vous montrez un abus de auto code> et ..." I>, pourriez-vous élaborer s'il vous plaît? la bonne démonstration i> montre la différence b> entre contournement et appeler le simulateur même i> à l'intérieur du setter, qui causerait une boucle récursive infinie et il se bloque lorsque La pile est débordée - par conséquent, l'approche finale évite de provoquer des boucles infinies en runtime.
Je pense qu'il est utile de déterminer comment les propriétés sont (ou pourraient-elles être) mises en œuvre par le compilateur.
Lorsque vous écrivez si vous utilisez arc fort>, si vous utilisez MRC fort> (c'est-à-dire arc fort> n'est pas activé), * - Notez qu'il s'agit d'une implémentation simplifiée et non atomique de auto.utilisateur = tableau; code> Le compilateur traduit ceci sur
[ auto-setusers: tableau]; code>
Lorsque vous écrivez
array = self.uSers; code> Le compilateur traduit ceci sur
array = [auto-utilisateurs]; code> p>
@synthesize code > Ajoute un ivar à votre objet ( sauf si vous ne l'ajoutez pas vous-même em>), et implémente les
-utilisateurs code> et
-Setutuers: code> Méthodes d'accessor pour vous ( sauf si vous fournissez votre propre em>) p>
-Settuseurs: code> ressemblera à quelque chose comme: < / p>
-SetUtilisateurs: code> va ressembler à quelque chose comme *: p>
-Setusers: code> em> p> p>
La seule réponse sur ce sujet qui parle de la différence d'une perspective de comptage de référence avec une telle élégance. Excellent.
Oui, c'est très correct. Quelques points mineurs: P>
iOS ne libère pas automatiquement d'objet simplement parce que vous utilisez la notation de points. Il libère un objet lorsque la propriété est déclarée code> copie code> ou Avec la dernière version de la boîte à outils du développeur (Xcode 4.4+), vous ne devez plus synthétiser manuellement les propriétés - elles sont automatiquement synthétisées (avec le soulignement principal). P> conserver code> (ou
fort code> in arc). Si, par exemple, vous utilisez un code non-ARC et que la propriété est déclarée comme
Attribuer code>, il ne relâchera pas l'objet. P>
Merci Jim. J'ai essayé Xcode 4.4 avec iOS 6 et oui, il ne nécessite pas de propriétés de synthèse, mais cette application fonctionnerait-elle sur la version inférieure d'IOS?
Oui - de la documentation officielle: La fonction par défaut @Synthesize code> ne nécessite aucun support spécial SDK ou Runtime.
Questions comme ça, vous devriez lire la documentation.
Salut @QEGAL Je suis passé à travers ce fil et si vous lisez ma question, la plupart des points sont les points de conclusion, mais ce que je ne pouvais pas obtenir, c'est quand utiliser quoi!