Ich kann nicht für andere sprechen, aber ich benutze nicht den gleichen Namen. Wenn ich eine Instanzvariable deklariere, dann mit einem führenden Unterstrich, so ist es offensichtlich, wenn ich mich auf die Instanzvariable oder die Setter/Getter-Methode beziehe.
Mit Xcode 4.4+ müssen Sie die Instanzvariable nicht deklarieren oder @synthesize
aufrufen, und der Compiler wird automatisch eine Instanzvariable mit einem führenden Unterstrich erstellen und die Setter/Getter-Methode für Sie bereitstellen.
Allerdings glaube ich nicht, dass dieser Mechanismus eine sehr gute Idee ist, da es Entwickler ermutigt, Eigenschaften ihrer Klasse zu exponieren, die nicht exponiert werden sollten.
Zum Beispiel dieser genommen wird von Ab iOS 6 Entwicklung:
@interface BIDViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *button;
- (IBAction)buttonPressed:(UIButton *)sender;
@end
Jetzt, während ich verstehe, dass Sie nicht auf einmal einen Anfänger zu viele Konzepte verwirren wollen, müssen Sie sofort verletzt die objektorientierte Kapselung, indem das Objekt UIButton
und die Aktionsmethode den Benutzern dieses Ansichtscontrollers zugänglich gemacht werden, und keines davon sollte offengelegt werden.
Was passiert zum Beispiel, wenn eine mit Klasse tut dies:
BIDViewController *vc = ...;
vc.button = nil;
oder
vc.buttonPressed(mySegmentedControl);
bricht die Hölle los. Jetzt, wo es 1000 Möglichkeiten gibt, ein Programm zu brechen, und wir uns nicht gegen alle verteidigen können, wollen wir kein bereits schwaches System schaffen (Objective-C liefert sehr wenig, um zu definieren, wer einen nennen kann und was nicht Ihrer Methoden) schwächer. mit privaten Instanzvariablen und Methoden
Die obige Umsetzung ist besser daran getan, die beide vom Interface Builder geehrt werden:
@implementation BIDViewController()
{
IBOutlet UIButton *_button;
}
- (IBAction)_buttonPressed:(UIButton *)sender;
@end
und alle mit Klassen werden eine härtere Zeit dieses Modell haben zu brechen.
Aber das ist natürlich mehr Denken und Tippen für einen Entwickler, und so haben Apple die neuen Funktionen eingeführt, damit sie das, was sie wollen, in kürzerer Zeit erledigen können Header-Datei und das Deklarations- und Implementierungsskelett wird für Sie bereitgestellt).
dup: http://stackoverflow.com/questions/5555736/objective-c-why-do-we-declare-ivars-in-the-h-member-area- if-property-scheint-zu – justin