Ich habe mit dem || = Feature Rubin als die spät und bin im Grunde in der Liebe zu lernen, wie sie faul Getter viel einfacher in Objective C. machen würdenRubin || = äquivalent in Objective-C
Derzeit schreiben ich schreibe Getter wie:
- (NSArray *)myArray {
if (!_myArray) {
_myArray = [NSArray array];
}
return _myArray
}
Es sei denn, im etwas mit dem || fehlt = ich wäre in der Lage den vorherigen Code in Ruby schreiben mit:
- (NSArray *)myArray {
return _myArray ||= [NSArray array];
}
das ist natürlich viel sauberer. Gibt es irgendetwas in der Objective-C-Sprache/Laufzeit, das Sie dazu befähigen würde?
Auch das folgende ist eine Zeile ternär für Getters, ich bin nicht sicher, ob es so effektiv ist wie die oben beschriebene bewährte Methode (erstes Snippet). Kann mir jemand sagen, wenn etwas schief Theres mit dabei:
- (NSArray *)myArray {
return _myArray = _myArray ? _myArray : [NSArray array];
}
Obwohl ich Objective C nicht kenne, möchten Sie '_myArray = [NSArray array];' in einer Klasse Konstruktor oder Initialisierungsmethode haben? Nochmals, nur ein möglicher Vorschlag von einem Typen, der Objective C nicht kennt: p – David
Beachten Sie, dass alle oben genannten Punkte falsch sind, wenn Sie sich für Thread-Sicherheit interessieren. –
Multithreading führt die Möglichkeit ein, dass Thread A den Setter aufrufen, den Non-Nil-Test nicht bestehen kann und dann von Thread B, der auch den Setter aufruft und den Nicht-Nil-Test nicht besteht, vorweggenommen wird. Beide Threads haben beschlossen, ein neues - separates - 'NSArray' zu erstellen und es in' _myArray' zu speichern; Heiterkeit folgt. –