# BOOL / bool / Boolean / NSCFBoolean

# BOOL/Boolean/bool/NSCFBoolean

  1. bool is a datatype defined in C99.
  2. Boolean values are used in conditionals, such as if or while statements, to conditionally perform logic or repeat execution. When evaluating a conditional statement, the value 0 is considered “false”, while any other value is considered “true”. Because NULL and nil are defined as 0, conditional statements on these nonexistent values are also evaluated as “false”.
  3. BOOL is an Objective-C type defined as signed char with the macros YES and NO to represent true and false

From the definition in objc.h:

typedef bool BOOL;
typedef signed char BOOL; 
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" 
// even if -funsigned-char is used.

#define YES ((BOOL)1)
#define NO  ((BOOL)0)

  • NSCFBoolean is a private class in the NSNumber class cluster. It is a bridge to the CFBooleanRef type, which is used to wrap boolean values for Core Foundation property lists and collections. CFBoolean defines the constants kCFBooleanTrue and kCFBooleanFalse. Because CFNumberRef and CFBooleanRef are different types in Core Foundation, it makes sense that they are represented by different bridging classes in NSNumber.
  • # BOOL VS Boolean


  • Apple's Objective-C frameworks and most Objective-C/Cocoa code uses
  • - Use BOOL in objective-C, when dealing with any CoreFoundation APIs


    • Boolean is an old Carbon keyword , defined as an unsigned char