很快就失败了IF状态

时间:2016-01-11 12:08:31

标签: objective-c conditional

假设我有这个IF

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

Objective-C会在失败之前执行两个verifyCondition方法吗?或者verifyCondition1失败后会失败吗?

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

3 个答案:

答案 0 :(得分:4)

C标准规定了短路评估,即"技术"关于你所询问的术语。因此,如果[self verifyCondition1]返回NO / FALSE,则执行会立即继续执行else块(如果有),或继续执行if语句后面的代码。

答案 1 :(得分:2)

自己验证兄弟。你可以确保这一点。 Avi是正确的。如果条件一失败,则会触发其他条件。

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

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


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

答案 2 :(得分:0)

如果你来自'C'背景,那么这不应该是一件令人难以置信的事情。

由于您正在对两个值进行条件检查,因此值可能为True / False(YES / NO),表达式会检查两者的短路

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

以下截图描绘了相同的内容。

enter image description here

这在任何地方都有用吗?

是的,的确如此。

几个例子:

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

其他例子:

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