BOOL

BOOL 类型用于 Objective-C 中的布尔值。它有两个值,YESNO,与更常见的 truefalse 形成对比。

它的行为很简单,与 C 语言相同。

BOOL areEqual = (1 == 1);    // areEqual is YES
BOOL areNotEqual = !areEqual    // areNotEqual is NO
NSCAssert(areEqual, "Mathematics is a lie");    // Assertion passes

BOOL shouldFlatterReader = YES;
if (shouldFlatterReader) {
    NSLog(@"Only the very smartest programmers read this kind of material.");
}

BOOL 是一个原语,因此它不能直接存储在 Foundation 集合中。它必须包裹在一个 NSNumber。Clang 为此提供了特殊的语法:

NSNumber * yes = @YES;    // Equivalent to [NSNumber numberWithBool:YES]
NSNumber * no = @NO;    // Equivalent to [NSNumber numberWithBool:NO]

BOOL 实现直接基于 C,因为它是 C99 标准类型 bool 的 typedef。YESNO 值分别定义为 __objc_yes__objc_no。这些特殊值是 Clang 引入的编译器内置函数,它们被翻译为 (BOOL)1(BOOL)0。如果它们不可用,则 YESNO 直接定义为强制转换形式。这些定义可在 Objective-C 运行时头 objc.h 中找到