Я изучаю рубин в последнее время, и я в основном в любви с || = функцией, как это сделало бы писать ленивые добытчик гораздо проще в Objective C.рубин || = эквивалент в Objective-C
В настоящее время Я пишу добытчиками, такие как:
- (NSArray *)myArray {
if (!_myArray) {
_myArray = [NSArray array];
}
return _myArray
}
Если им не хватает чего-то с || = я смог бы написать предыдущий код в Ruby, используя:
- (NSArray *)myArray {
return _myArray ||= [NSArray array];
}
То, очевидно, намного чище. Есть ли что-нибудь вообще в языке Objective-C/runtime, который позволит вам это сделать?
Кроме того, следующая тройная тройка для геттеров, im не уверен, насколько эффективен метод try и true выше (первый фрагмент). Может кто-нибудь сказать мне, если Theres ничего плохого делать:
- (NSArray *)myArray {
return _myArray = _myArray ? _myArray : [NSArray array];
}
Хотя я не знаю Objective C, не хотите ли вы иметь '_myArray = [NSArray array];' в методе класса Constructor или initialize? Опять же, просто потенциальное предложение парня, который не знает цели C: p – David
Обратите внимание, что все вышеперечисленное неверно, если вы заботитесь о безопасности потоков. –
Многопоточность вводит возможность того, что Thread A может вызвать сеттер, выдать не-nil-тест, а затем быть упреждаемым потоком B, который также вызывает setter и не выполняет тест non-nil. Оба потока решили создать новый - отдельный - 'NSArray' и сохранить его в' _myArray'; начинается веселье. –