Ho imparato rubino come di ritardo e sono sostanzialmente in amore con il || = funzione in quanto renderebbe la scrittura getter pigri molto più facile in Objective C.Rubino || = equivalente in Objective-C
Attualmente scrivo getter quali:
- (NSArray *)myArray {
if (!_myArray) {
_myArray = [NSArray array];
}
return _myArray
}
a meno im manca qualcosa con il || = sarei stato in grado di scrivere il codice precedente in Ruby utilizzando:
- (NSArray *)myArray {
return _myArray ||= [NSArray array];
}
Questo è, ovviamente, molto più pulito. C'è qualcosa nel linguaggio/runtime Objective-C che ti permetterebbe di fare questo?
Inoltre, il seguente è un ternario a una riga per i getter, non sono sicuro che sia efficace come il metodo provato e vero pubblicato sopra (primo frammento). Qualcuno può dirmi se c'è qualcosa di sbagliato nel fare:
- (NSArray *)myArray {
return _myArray = _myArray ? _myArray : [NSArray array];
}
Anche se non conosco l'Objective C, non si desidera avere '_myArray = [array NSArray];' in un costruttore Costruttore o metodo di inizializzazione? Ancora una volta, solo un potenziale suggerimento da parte di un ragazzo che non conosce l'Obiettivo C: p – David
Nota che tutto quanto sopra non è corretto se ti interessa la sicurezza dei thread. –
Il multithreading introduce la possibilità che il thread A possa chiamare il setter, fallire il test non nullo, e quindi essere prevenuto dal thread B, che chiama anche il setter e fallisce il test non nullo. Entrambi i thread hanno deciso di creare un nuovo - separato - 'NSArray' e di memorizzarlo in' _myArray'; segue l'ilarità. –