Apple empfiehlt, eine BOOL-Eigenschaft folgendermaßen zu deklarieren:
@property (nonatomic, assign, getter=isWorking) BOOL working;
Da ich Objective-C 2.0-Eigenschaften und Punktnotation verwende, greife ich mit auf diese Eigenschaft zu self.working
. Ich weiß, dass ich auch gebrauchen könnte [self isWorking]
- aber ich muss nicht.
Warum sollte ich eine zusätzliche Eigenschaft definieren, da ich überall die Punktnotation verwende? Wäre es in Ordnung, einfach zu schreiben?
@property (nonatomic, assign) BOOL working;
Oder habe ich getter=isWorking
in meinem Fall irgendwelche Vorteile beim Schreiben (Verwendung der Punktnotation)?
Vielen Dank!
objective-c
ios
properties
Patrick
quelle
quelle
Antworten:
Apple empfiehlt lediglich, einen
isX
Getter für stilistische Zwecke zu deklarieren . Es spielt keine Rolle, ob Sie den Getter-Namen anpassen oder nicht, solange Sie die Punktnotation oder die Nachrichtennotation mit dem richtigen Namen verwenden. Wenn Sie die Punktnotation verwenden, macht dies keinen Unterschied. Sie greifen dennoch über den Eigenschaftsnamen darauf zu:Oder
quelle
isX
Getter zu deklarieren, aber Xcode kann sie nicht im Popup für die automatische Vervollständigung auflisten. (In meinem Beispiel)working
ist dort aufgeführt,isWorking
ist es aber nicht. Ich sehe also keine Vorteile darin, BOOL-Getter zu deklarieren. Ich muss mehr tun, um sie verwenden zu können (deklariere den Getter), aber ich bekomme weniger (keine automatische Vervollständigung).Apple empfiehlt aus stilistischen Gründen. Wenn Sie diesen Code schreiben:
Dann können Sie [object isWorking] nicht verwenden.
Es wird ein Fehler angezeigt. Aber wenn Sie unten Code verwenden, bedeutet
Sie können also [object isWorking] verwenden.
quelle
Die Verwendung von Eigenschaften mit primitiven Typen hat keinen Vorteil.
@property
wird mit Heap zugewiesen verwendetNSObjects
wieNSString*
,NSNumber*
,UIButton*
, und usw., weil der Speicher verwaltet Accessoren erstellt werden kostenlos. Wenn Sie a erstellenBOOL
, wird der Wert immer auf dem Stapel zugewiesen und erfordert keine speziellen Accessoren, um einen Speicherverlust zu verhindern.isWorking
ist einfach die beliebte Art, den Zustand eines Booleschen Wertes auszudrücken.In einer anderen OO-Sprache würden Sie eine Variable
private bool working;
und zwei Accessoren erstellen:SetWorking
für den Setter undIsWorking
für den Accessor.quelle
@property
ist sehr für die Verwendung mit primitiven Typen gedacht und hat allein aus Gründen der Konsistenz erhebliche Vorteile. Darüber hinaus sind einige primitive Typen (64-Bit-Typen auf einigen 32-Bit-CPUs und 128-Bit-Typen auf vielen 32- und 64-Bit-CPUs) bei der Zuweisung nicht atomar.@property
Auch in diesen Fällen kann die Atomizität von Vorteil sein.atomic
undnonatomic
Attribute?