if (self.aBooleanProperty) {
self.aBooleanProperty = YES;
// Do some stuff
}
В правильно написанном коде вы ничего не пропускаете, и эта линия сеттера увеличивает оплачиваемый lin кода одного с помощью no-op.
Есть две причины, по которым это можно сделать по ошибочным причинам.
Как сказал @HotLicks, там может быть побочные эффекты сеттер, что может необходимость срабатывают. Но они должны были быть запущены по набору , если разработчик не имел ошибочное представление о настройке ivar непосредственно повсюду, а затем используя вышеприведенное для объединения стоимости установки в одно место. Но это будет замечательно хрупкая и глупая вещь.
Другая причина в том, что, традиционно, BOOL-объектив-C является прославленным char
. Только это не так прославлено. Таким образом, сравнение BOOL с YES
действительно опасно, потому что YES
имеет явное значение.
BOOL mmmmmK = 2; // this is valid
if (mmmmmK == YES) { /* this won't execute */ }
Вроде как при подъеме на скалу и что-то начинает падать, вы не кричите «бутылка», «башмак», «галька», или «протезом конечности», но вы всегда орут ROCK.
Таким образом, возможно разработчик думал о нормализации утвердительного с явным ДА. Опять же, весьма сомнительный и, даже если это так, тогда это должно вызвать подозрение в отношении качества остальной части кода.
Ouch.
if self.aBooleanProperty - да, только тогда он входит в цикл. – Balu
У вас ничего не пропало.Кто-то, о котором вы упоминали, не хватает большого количества – Krishnabhadra
Когда вы имеете дело с булевой переменной, в приведенном выше шаблоне нет никакого движения. В свойствах Objective-C ** есть небольшая вероятность того, что сеттер имеет желаемый побочный эффект. Но, скорее всего, этот шаблон является результатом повторных изменений кода - вы можете довольно легко получить странные вещи, подобные этому, когда вы измените это, а затем, затем снова. –