iOS Setter und Getters und Unterstrichene Eigenschaftsnamen

8

Also habe ich eine NSString-Eigenschaft namens description, die wie folgt definiert ist:

%Vor%

Ich kann es als _description bezeichnen, wenn ich den Getter wie folgt definiere:

%Vor%

Wenn ich jedoch einen Setter definiere, wie folgt:

%Vor%

Es bricht _description von dem oben erwähnten Getter (nicht deklarierter Bezeichner). Ich weiß, dass ich wahrscheinlich einfach die self.description verwenden kann, aber warum passiert das?

    
muttley91 10.06.2013, 04:53
quelle

2 Antworten

15

@borrrdens Antwort ist sehr gut. Ich möchte nur einige Details hinzufügen.

Eigenschaften sind eigentlich nur Syntaxzucker. Wenn du also eine Eigenschaft wie du deklarierst:

%Vor%

Es wird automatisch synthetisiert. Was es bedeutet: Wenn Sie keinen eigenen Getter + Setter angeben (siehe borrrdens Antwort), wird eine Instanzvariable erstellt (standardmäßig hat sie den Namen "Unterstrich + Eigenschaftsname"). Und Getter + Setter werden gemäß der von Ihnen bereitgestellten Eigenschaftsbeschreibung (stark, nichtatomisch) synthetisiert. Wenn Sie also die Eigenschaft erhalten / setzen, ist dies tatsächlich gleichbedeutend mit dem Aufruf des Getter oder des Seters. Also

%Vor%

ist gleich [self description] . Und

%Vor%

ist gleich [self setDescription: myMutableString];

Wenn Sie also einen Setter wie Sie definiert haben:

%Vor%

Es verursacht eine Endlosschleife, da self.description = description; [self setDescription:description]; aufruft.

    
FreeNickname 10.06.2013, 05:09
quelle
10

1) NSObject hat bereits eine Methode namens description. Wähle einen anderen Namen

2) Ihr Setter ist eine Endlosschleife

Was aber Ihre eigentliche Frage betrifft: Der Compiler generiert nur dann Backing-Variablen, wenn Sie beide Methoden nicht überschreiben.

P.S. Nein, du kannst nicht einfach "self.description" verwenden, denn dann wäre dein Getter auch eine Endlosschleife.

    
borrrden 10.06.2013 05:02
quelle

Tags und Links