Wie überschreibe ich einen eigenschaftssynthetisierten Getter?
Wie überschreibe ich einen eigenschaftssynthetisierten Getter?
Antworten:
Innerhalb Ihrer Eigenschaftsdefinition können Sie Getter- und Setter-Methoden wie folgt angeben:
@property (nonatomic, retain, getter = getterMethodName, setter = setterMethodName) NSString *someString;
Sie können nur den Getter, nur den Setter oder beides angeben.
@synthesizeIhre Variablen nicht mehr verwenden, Sie benötigen nur noch die @propertyund dort müssen Sie nur noch Ihren Getter und / oder Setter angeben.
Implementieren Sie die Methode einfach manuell, zum Beispiel:
- (BOOL)myBoolProperty
{
// do something else
...
return myBoolProperty;
}
Der Compiler generiert dann keine Getter-Methode.
@propertyist atomic(Standardeinstellung), einen @synthesizeGetter / Setter nicht korrekt mit einem manuell geschriebenen Getter / Setter mischen können .
atomicnicht ist , dass nützlich; Es wird nichts unternommen, um die Datenintegrität in einer Thread-Anwendung zu gewährleisten. Es verhindert lediglich, dass eine App aufgrund einer offensichtlichen Rennbedingung abstürzt. Wenn Sie sich atomicstark verlassen, machen Sie es fast sicher falsch ... :)
atomicnicht freigelegt ist, können Sie nicht nur den Setter oder nur den Getter manuell implementieren und die Atomizität mit einem @synthesized- atomicSetter / Getter sicherstellen .
Ich möchte nur hinzufügen, ich konnte die BOOL-Eigenschaft nicht mit getter / setter überschreiben, bis ich Folgendes hinzufüge:
@synthesize myBoolProperty = _myBoolProperty;
Der vollständige Code lautet also:
in der Header-Datei:
@property BOOL myBoolProperty;
in der Implementierungsdatei:
@synthesize myBoolProperty = _myBoolProperty;
-(void)setMyBoolProperty:(BOOL) myBoolPropertyNewValue
{
_myBoolProperty = myBoolPropertyNewValue;
}
-(BOOL) myBoolProperty
{
return _myBoolProperty;
}