Was Sie sehen, ist die Verwendung von Unterstreichungen, um zwischen Instanzvariablen und Eigenschaften zu unterscheiden. So eine Klassendeklaration könnte sein:
@interface Foo {
NSString* _label;
....
}
@property (nonatomic, retain) NSString* label; // notice: no underline
Dann in der Implementierungsdatei würden Sie haben:
@synthesize label=_label; // the property is matched with the ivar
Wenn nun in der Umsetzung, wenn Sie die Instanzvariable zugreifen möchten direkt könnten Sie einfach _label
verwenden Aber um durch die Eigenschaft Accessor-Methoden (die sich um Retain/Releases und eine Reihe anderer Buchhaltungsaufgaben kümmern) zu gehen, würden Sie self.label
verwenden. Von außen möchten Sie immer durch die {object}.label
Eigenschaft gehen.
Der andere Weg ist, ohne die unterstrichenen zu tun und benutzen Sie einfach:
NSString* label;
@property (nonatomic, retain) NSString* label;
...
@synthesize label;
Es funktioniert auf die gleiche, aber dann könnte es jemand liest den Code zu verwirren und zu versuchen, den Überblick über label
vs self.label
zu halten. Ich persönlich finde die Apple-Konvention (mit Unterstreichungen) ein bisschen einfacher zu lesen, aber es ist eine Frage der Präferenz.
http://stackoverflow.com/questions/822487/how-does-andunderscore-in-front-of-a-variable-in-a-cocoa-objective-c-class-work – Chuck