Marks

iOS开发者,喜欢研究技术。

0%

Objective-C中的BOOL类型

Objective-C中的BOOL类型在Watch和64位iOS上的原始类型为bool,而在其它情况下是signed char。我们用@encode去看看BOOL的类型串:

1
2
3
@encode(BOOL)		// 64位iOS系统:"B"
@encode(BOOL) // 32位iOS系统,32/64位OS X:"c"

所有这边有一个问题,下面这段代码中变量b的值在不同环境下,其结果可能是不一样的:

1
2
BOOL a = 100 & 20;
BOOL b = (a == YES);

当BOOL为bool时,b的值为1;而当BOOL为signed char时,b的值为0。所以,如果我们判断一个BOOL值是否为真时,不应该通过if(a == YES)这种方式来判断,要么直接就if (a),要么就if (a != NO)