更快地使 IF 条件失败

Failing an IF condition sooner

假设我有这个 IF

if ([self verifyCondition1] && [self verifyCondition2])

Objective-C 会在失败前执行两个 verifyCondition 方法吗?还是会在 verifyCondition1 失败后立即失败?

我的想法是不执行不需要的代码,加快执行速度。

C 标准指定了 short-circuit 求值,即 "technical" 术语来表示您所询问的内容。因此,如果 [self verifyCondition1] returns NO/FALSE,执行会立即继续到 else 块(如果有的话),或者执行到 if 语句之后的代码。

兄弟你自己验证吧。你可以通过它来确定。 Avi 是正确的。如果第一个条件失败,它会触发其他条件。

- (BOOL)check1 {
    NSLog(@"condition 1");
    return NO;
}

- (BOOL)check2 {
    NSLog(@"condition 2");
    return YES;
}


if ([self check1] && [self check2]) {
    NSLog(@"YES");
}

如果您来自 'C' 背景,那么这应该不是什么 mind-boggling 事情。

由于您正在对两个值进行条件检查,因此值可能是 True/False (YES/NO) 并且表达式检查 short-circuit 两者。

结果很明显,如果第一个条件失败,那么它永远不会检查后面的条件。

以下屏幕截图描述了相同的情况。

这对任何地方都有帮助吗?

是的,的确如此。

几个例子:

if (array.count>0 && [array[0] isEqualToString:@"someString"]){
  ...
}

其他示例:

if ([returnedObject isKindofClass:[MyBoxClass class]] && returnObject.length * returnedObject.bredth>0){
    ....
}