2017-08-16 2 views
0
ViewController.h 

@property (strong,nonatomic) NSMutableArray *products; 

@property (strong, nonatomic) IBOutlet UITableView *tableViewProducts; 

ich möchte wissen, Apple oder Entwickler empfohlen, Zugriff auf Instanzvariablen und Accessor-Methoden.Wie wird empfohlen, auf Instanzvariablen und -methoden zuzugreifen?

Sollte ich _instanceVariable oder self.instanceVariable verwenden oder sollte ich alle Ivars synthetisieren?

Methode 1

ViewController.m 

@synthesize products; 
@synthesize tableViewProducts; 
@synthesize productCount; 
...... 
UITableViewCell *cell=[tableViewProducts dequeueReusableCellWithIdentifier:@"cellReuseIdentifier"]; 
productCount. 

Methode 2

ViewController.m 

UITableViewCell *cell=[_tableViewProducts dequeueReusableCellWithIdentifier:@"cellReuseIdentifier"]; 

Methode 3

ViewController.m 

UITableViewCell *cell=[self.tableViewProducts dequeueReusableCellWithIdentifier:@"cellReuseIdentifier"]; 

Antwort

2

immer Zugriff auf die Eigenschaften mit den Zugriffsmethoden, so dass immer self.property verwenden usw. Außer in init (und initWithWhatever usw.) Verfahren, bei denen man immer die Unterstützung Variable _property direkt usw. zugreifen sollten Dies ist Nebenwirkungen zu vermeiden, den Zugriff auf self vor self hat die Initialisierung abgeschlossen.

Der Grund, warum Sie immer self.property verwenden möchten, ist, weil das nützliche Nebenwirkungen ermöglicht. Die Accessor-Methoden können außer Kraft gesetzt werden, um Werte zu validieren, KVO-Effekte auszulösen (z. B. automatisch Ansichten zu aktualisieren), Standardwerte zu verwenden, wenn kein bestimmter Wert festgelegt wurde, und vieles mehr. Diese werden umgangen, wenn Sie die Backing-Variablen direkt verwenden.

2

Sie haben jetzt nicht mehr verwenden @synthesize seit Jahren erforderlich, damit nicht die Mühe, diese Zeilen hinzufügen .

Da Sie über Eigenschaften verfügen, greifen Sie auf die Eigenschaften zu, nicht auf die zugrunde liegenden Instanzvariablen.

Dies bedeutet, dass Ihre 3. Option die beste Wahl ist.

0

Heutzutage müssen Sie nicht @synthesize Eigenschaften. Da Sie Ihre Eigenschaften bereits definiert haben, müssen Sie die Instanzvariable nicht einmal verwenden. Verwenden Sie einfach die Eigenschaft selbst als self.instanceVariable.

0

Sie müssen nicht alle Eigenschaften @synthesize. Aber Can @synthesize Eigenschaft zum Erstellen benutzerdefinierter Setter-Methode.

self.propertyName wird diesen Setter ausgelöst Methode & _propertyName wird nicht ausgelöst.

Beispiel:

.h

@property(string, nonatomic) NSString *name; 

.m

@synthesize name = _name; 
- (void)setName:(NSString *)name { 
    _name = name; 
} 
Verwandte Themen