Wie funktioniert die automatische Eigenschaft synthetisieren in xcode 4.4?

8

Ich bin neu in Objective-C und XCode, aber ich war froh zu sehen, dass XCode 4.4 automatisch meine Eigenschaften für mich jetzt synthetisiert. Ich denke, dass ich @synthesize für meine Eigenschaften nicht mehr eingeben muss, und dass ich auf sie zum Beispiel mit self.propertyName = @"hi"; zugreifen kann.

Ich versuche, einen Beispielcode neu zu schreiben, damit ich ihn besser verstehen kann, aber dieser Code implementiert eine benutzerdefinierte Getter-Methode. Im Beispielcode wird die Eigenschaft manuell als @synthesize managedObjectContext = __managedObjectContext; synthetisiert. Der benutzerdefinierte Getter sieht folgendermaßen aus:

%Vor%

Im Code dieser Person sehe ich, dass er nur seinen manuell synthetisierten Accessor benutzt, um sowohl zu bekommen als auch zu setzen. Ich dachte in meinem Code, ich könnte nur die __managedObjectContext durch self.managedObjectContext ersetzen, aber nein. Wenn ich dies tue, erhalte ich eine Fehlermeldung, dass ich versuche, eine Eigenschaft readonly zu vergeben. Dies ist sinnvoll, da diese Eigenschaft von diesem anderen Coder als Read-Only definiert wird.

%Vor%

Also, ich denke etwas darüber aus, wie er seine Eigenschaft manuell synthetisiert, bedeutet, dass er, wenn er diesen spezifizierten Setter benutzt, ihm erlaubt, eine readonly Eigenschaft irgendwie zu setzen.

Wenn ich die Eigenschaft manuell synthetisiere, wie im Code, den ich verweise, geht alles wieder zum Laufen, aber das nutzt nicht die neue automatische Synthese. Wenn ich die readonly entferne, kann ich diese Eigenschaft wie erwartet einstellen, aber ich habe das Gefühl, dass ich nicht verstehe, warum er sie nur liest. Also wette ich, dass ich da etwas kaputt mache.

Also, missbrauche ich die neue automatische Synthese? Wie setze ich das mit dem Setter, wenn das automatische Synthetisieren es nicht für mich erstellt, wegen readonly?

Danke

    
Ryan 01.08.2012, 04:11
quelle

1 Antwort

10

Wenn XCode automatisch synthetisiert, simuliert es die folgenden ...

%Vor%

Sie können also auf die Daten mit self.foo oder object.foo zugreifen.

Bei der Implementierung von Accessor-Methoden (und Initialisierer und Dealloc) sollten Sie den iVar jedoch direkt verwenden.

Hinweis: Diese iVars haben zwei Unterstriche. Und sie werden in der Accessor-Methode manipuliert. Verwenden Sie _managedObjectContext, und Sie sollten gut gehen.

    
Jody Hagins 01.08.2012, 04:28
quelle

Tags und Links