Ich versuche zu verstehen, wie Strategien einige Leute verwenden, um Instanz vars vs. Eigenschaften zu unterscheiden. Ein übliches Muster ist die folgende:Eigenschaft vs Instanzvariable
@interface MyClass : NSObject {
NSString *_myVar;
}
@property (nonatomic, retain) NSString *myVar;
@end
@implementation MyClass
@synthesize myVar = _myVar;
Nun, dachte ich die ganze Prämisse hinter dieser Strategie ist, so dass man leicht den Unterschied zwischen einem Ivar und Eigenschaft unterscheiden. Also, wenn ich die Speicherverwaltung von einer synthetisierten Eigenschaft geerbt verwenden möchten, würde ich etwas verwenden, wie zum Beispiel:
myVar = @"Foo";
Der andere Weg, es über selbstbeziehende würde [Ivar/Immobilien hier]..
Das Problem bei der Verwendung der @synthesize myVar = _myVar Strategie, die ich dachte, dass das Schreiben von Code wie:
myVar = some_other_object; // doesn't work.
Der Compiler beschwert sich, dass nicht angemeldete myVar ist. Warum ist das der Fall?
Danke.
Nicht einen alten Beitrag wiederbeleben, aber ich habe mich über dieses Thema gefragt, als ich diese Frage sah. Dies scheint eine schöne Erklärung zu sein, aber für eine Situation, die mich getroffen hat. Wenn ich etwas wie '[someObject.someArray addObject: anotherObject]' tue, würde das nicht bedeuten, dass das Objekt 'anotherObject' zu einer temporären Kopie des Arrays' someArray' hinzugefügt wird und die tatsächliche Eigenschaft nicht beeinflusst? –
@Rickay: Das Standardverhalten ist das Kopieren, sodass ein externes Objekt den internen Status nicht ändern kann. Sie können jedoch 'copy' in' retain' ändern, wenn Sie ein veränderbares Array anbieten möchten. –
Ahh, ich verstehe, danke, dass du das geklärt hast. –