BOOL
BOOL 类型用于 Objective-C 中的布尔值。它有两个值,YES 和 NO,与更常见的 true 和 false 形成对比。
它的行为很简单,与 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。YES 和 NO 值分别定义为 __objc_yes 和 __objc_no。这些特殊值是 Clang 引入的编译器内置函数,它们被翻译为 (BOOL)1 和 (BOOL)0。如果它们不可用,则 YES 和 NO 直接定义为强制转换形式。这些定义可在 Objective-C 运行时头 objc.h 中找到