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?
@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
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.
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.
Tags und Links objective-c ios