Objective-C中的BOOL类型在Watch和64位iOS上的原始类型为bool,而在其它情况下是signed char
。我们用@encode
去看看BOOL的类型串:
1 | @encode(BOOL) // 64位iOS系统:"B" |
所有这边有一个问题,下面这段代码中变量b的值在不同环境下,其结果可能是不一样的:
1 | BOOL a = 100 & 20; |
当BOOL为bool时,b的值为1;而当BOOL为signed char
时,b的值为0。所以,如果我们判断一个BOOL值是否为真时,不应该通过if(a == YES)
这种方式来判断,要么直接就if (a)
,要么就if (a != NO)
。