Beachten Sie zuerst, dass die neueste Version von Xcode überhaupt kein @ synthesize mehr benötigt. Sie können (und sollten) es einfach weglassen. Das heißt, hier ist, was die Stücke tun.
ist eine Erklärung der Accessoren. Es ist nur eine Erklärung. Es gibt sehr wenig Unterschied zwischen den folgenden:
@property (nonatomic, readwrite, strong) NSString *something;
gegen
- (NSString *)something;
- (void)setSomething:(NSString)aSomething;
Der wesentliche Unterschied besteht darin, dass diese Methoden erklärt @property
mit der Compiler (synthetisieren) automatisch generieren können die Implementierungen für Sie. Es ist nicht erforderlich, dass der Compiler das für Sie erledigt. Sie sind absolut frei, something
und setSomething:
von Hand zu implementieren, und es ist üblich zu tun. Wenn Sie sie jedoch nicht manuell implementieren, erstellt der Compiler automatisch einen Ivar namens _something
und erstellt eine sinnvolle Implementierung für den Getter und Setter.
In älteren Versionen von Xcode mussten Sie explizit die automatische Generierung mit dem Schlüsselwort @synthesize
anfordern. Aber das ist nicht mehr erforderlich. Heute ist der einzige Grund, @synthesize
zu verwenden, wenn Sie wollen, dass der IVAR einen nicht standardmäßigen Namen hat (niemals das tun).
Ein wichtiger Punkt hier ist, dass die Methoden something
und setSomething:
sind nur Methoden. Es gibt nichts Magisches an ihnen. Sie sind keine speziellen "Eigentumsmethoden.„Sie sind nur Methoden, die vereinbarungsgemäß Zugang ein Stück Zustand Dieses Stück Zustand oft in einem Ivar gespeichert ist, muss aber nicht sein
Um noch deutlicher:.. object.something
tut nicht mean“ Rückkehr der ivar _something
von object
genannt.“Es bedeutet‚das Ergebnis der [object something]
zurückkehren, was auch immer das tut.‘Es ist üblich, dass die den Wert eines ivar zurückzukehren.
Sie sollten alle Ihre (interner erklären und external) unter Verwendung von Deklarationen, und Sie sollten vermeiden, direkt Ivars zu deklarieren.Sie sollten auch immer Zugriff auf Ihre Eigenschaften über ihre Accessoren (self.something
), außer in die init
und dealloc
Methoden. In init
und dealloc
sollten Sie direkt den ivar (_something
) verwenden.
Denken Sie daran, wenn Sie eine '@ Eigenschaft' mehr als wahrscheinlich haben, benötigen Sie die '@ synthetisieren '. Dies ist weil yes '@ property' der Welt mitteilt, dass ein generischer' Getter' und 'Setter' benötigt werden, aber' @ synthesize' tatsächlich die 'getters' und' setter' erzeugt, können Sie diese überschreiben und Ihre eigenen erstellen 'Getters' und' Setter' wenn du so magst wie die erzeugten werden sehr einfach sein. Schauen Sie sich die iTunesU 'iPad und iPhone Anwendungsentwicklung von Paul Hegarty' an. So denke ich darüber und es ist noch nicht gescheitert. – Popeye
Vielen Dank Popeye ... ITunes U ist FANTASTISCH !!! Ich bin tatsächlich auf Lektion 4 oder Pauls 2011-Serie. Ich bin gerade dabei, das XCode 4 Learning Objective C neben diesen Serien zu lesen ... das war mir immer noch nicht klar. – RichWalt