带有&&运算符的if语句检查第二个值?

Rol*_*som 6 if-statement objective-c operators ios

在是否if-statement&& operator检查第二个参数,如果第一个是false/ NO

以下是否能够崩溃?

NSDictionary *someRemoteData = [rawJson valueForKey:@"data"];
if( [someRemoteData isKindOfClass:[NSDictionary class]] && someRemoteData.count > 0 ){
    //..do something
}
Run Code Online (Sandbox Code Playgroud)

请不要简单的是或否答案,但解释原因.

das*_*ght 20

不,在得知答案后,它不会评估表达式NO.这称为短路,它是使用类似语法评估C,C++,Objective C和其他语言中的布尔表达式的重要部分.条件从左到右评估,使评估方案可预测.

同样的规则适用于||运算符:只要代码知道该值YES,评估就会停止.

短路可以防止在单个复合表达式中进行无效评估,而不是选择if语句.例如,

if (index >= 0 && index < Length && array[index] == 42)
Run Code Online (Sandbox Code Playgroud)

如果不是为了短路,会导致不确定的行为.但由于评估跳过评估array[index]何时index无效,因此上述表达是合法的.