Eigenschaften und Instanzvariablen in Objective-C

Ich bin ziemlich verwirrt über die Eigenschaften und Instanz-Variablen in Objective-C.

Ich bin etwa auf halbem Weg durch Aaron Hillegass ist "Cocoa Programming for Mac OS X" und alles ist logisch. Sie würden deklarieren Sie eine Klasse, so etwas wie dieses:

@class Something;

@interface MyClass : NSObject {
    NSString *name;
    NSArray *items;

    Something *something;

    IBOutlet NSTextField *myTextField;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSArray *items;
  • Da andere Objekte zu manipulieren, unsere name und items Instanz-Variablen, die wir verwenden @property/@synthesize zum generieren von Accessor/Mutator für Sie. In unserer Klasse, wir verwenden nicht die Accessor/Mutator—wir haben gerade die Interaktion mit der Instanz-Variablen direkt.
  • something ist nur eine Instanz-variable, die wir verwenden in unserer Klasse, und da sonst niemand verwenden muss, können wir es nicht schaffen, ein paar von Zugriffsmethoden und Mutatoren für die es.
  • Müssen wir die Interaktion mit einem text-Feld in unserer Benutzeroberfläche, so erklären wir eine IBOutlet für Sie, schließen Sie es, und wir sind fertig.

Alles sehr logisch.

Allerdings in der iPhone-Welt, die Dinge scheinen anders zu sein. Menschen erklären, - Eigenschaften für jede einzelne Instanz-variable, deklarieren Sie Eigenschaften, die für IBOutletsund verwenden Accessor/Mutator Interaktion mit der Instanz-Variablen innerhalb der Klasse (z.B. Sie schreiben würden [self setName:@"Test"] eher als name = @"Test").

Warum? Was ist Los? Sind diese Unterschiede iPhone-spezifisch ist? Was sind die Vorteile der Deklaration von Eigenschaften für alle Instanz-Variablen die Deklaration von Eigenschaften für IBOutletsund mit Accessor/Mutator innerhalb Ihrer eigenen Klasse?

InformationsquelleAutor der Frage Steve Harrison | 2009-10-11

Schreibe einen Kommentar