假设我有这个IF
if ([self verifyCondition1] && [self verifyCondition2])
Objective-C会在失败之前执行两个verifyCondition
方法吗?或者verifyCondition1
失败后会失败吗?
我的想法是不执行任何不需要的代码并加快执行速度。
答案 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),表达式会检查两者的短路。
结果很明显,如果第一个条件失败,那么它将永远不会检查以下条件。
以下截图描绘了相同的内容。
这在任何地方都有用吗?
是的,的确如此。
几个例子:
if (array.count>0 && [array[0] isEqualToString:@"someString"]){
...
}
其他例子:
if ([returnedObject isKindofClass:[MyBoxClass class]] && returnObject.length * returnedObject.bredth>0){
....
}