我正在通过别人的代码库工作,有以下几行:
if (self.aBooleanProperty) {
self.aBooleanProperty = YES;
// Do some stuff
}
是否有任何指向检查后立即将其设置为YES
?这里有什么我想念的吗?
答案 0 :(得分:7)
if (self.aBooleanProperty) {
self.aBooleanProperty = YES;
// Do some stuff
}
在正确编写的代码中,您没有遗漏任何内容,并且该setter行使用no-op将可计费行代码增加一个。
但有两个原因,这可能是出于误导的原因。
正如@HotLicks所说,可能对设置者产生副作用,可能需要被触发。但是它们应该在set 上被触发,除非开发人员有误导的概念,即直接在任何地方设置ivar,然后使用上面的方法将设置成本合并到一个地点。但那将是一件非常脆弱和愚蠢的事情。
另一个原因是,传统上,Objective-C的BOOL是一个美化的char
。只有它没有那么美化。因此,将BOOL与YES
进行比较实际上是危险的,因为YES
具有明确的值。
BOOL mmmmmK = 2; // this is valid
if (mmmmmK == YES) { /* this won't execute */ }
有点像攀登悬崖,有些事情开始下降,你不要喊“瓶子”,“鞋子”,“鹅卵石”或“假肢”,但你总是喊叫 ROCK
所以,也许开发人员正在考虑用明确的YES来肯定肯定。再次,非常值得怀疑,即使情况确实如此,那么它应该引起对其余代码库质量的怀疑。
哎哟。
答案 1 :(得分:2)
如果没有更多代码,这很难分辨。我想每个人都会同意代码看起来是错的,但是,我们看到的是一个obj-c属性 - 以前的程序员可以做一些“聪明”的事情,例如当您调用它时,aBooleanProperty
的吸气剂可能会将自己设置为NO
。
在修改代码之前,请检查getter。这让我想起了schrödinbug
答案 2 :(得分:1)
我认为这个人错误地写了YES,而是应该写了NO,因为它在检查条件时已经是YES。或者对该行有任何意义。
答案 3 :(得分:0)
如果
self.aBooleanProperty = YES;
包含在大括号中,不需要它,如果是
self.aBooleanProperty = NO;
包含,然后它是合乎逻辑的