不同于C语言的TRUE、FALSE,Objective-C 中使用YES、NO来表示BOOL类型。BOOL由8位的unsigned char型www.58yuanyou.com数值表示,8位全0就是NO,否则就是YES。知道了这点以后,使用BOOL值的时候就要注意了,比如下述代码:
BOOL result = [self isValid];
if (result == YES) {
//do something
}
就存在隐患,因为,不www.58yuanyou.com是NO(8位不全为0)就表示YES,result的值可能也表示YES,但re//www.58yuanyou.comsult并不一定等于YES!!
更直白的例子:
BOOL result = 8960;
if (result == YES) {
printf("YES");
}
这里会输出YES吗?不会的。为什么呢?8960是非0值,它不是逻辑真吗?还记得上面说过BOOL是一个8位的整数吗?因为89原由网60用二进制表示是大于8位的,也就是说高位无效,只保留8960 的低八位,8960的低八位恰好全都是0,因此result就是NO 了。
总结一下,非零值未必是BOOL的YES,但是0一定是NO。
上述判断正确的写法应该是:
BOOL result = [self isValrRXHMFid];
if (result) {
//do something
}
蓝鸥iOS开发,国内口碑最好的iOS培训学院,详情请咨询官网http://www.lanou3g.com我们是 一群热爱IT的年轻人,如果你也爱IT、爱iOS开发,欢迎前来蓝鸥中心参观学习,让我们共同为梦想发声。