Sometimes we may define a BOOL B; B = YES; NSLog (@ "BOOL -- B --> % @", B); then the running program will crash, this is because % @ prints an object and BOOL is a data type. Use % @ to ensure that the corresponding parameter must be an object and the description method of the object is also implemented, so that the content of the object can be printed. NSLog actually calls the description method of this object. How to print BOOL data? Output 1. NSLog (@ "BOOL -- B --> % s", B? "YES": "NO"); convert to NSString object to Output 2. NSLog (@ "BOOL -- B --> % @", B? @ "YES": @ "NO"); BOOL type YES indicates 0, 3, not 0. NSLog (@ "BOOL -- B --> % d", B); test: [cpp] BOOL B = YES; NSLog (@ "BOOL -- B --> % s ", b? "YES": "NO"); NSLog (@ "BOOL -- B --> % @", B? @ "YES": @ "NO"); NSLog (@ "BOOL -- B --> % d", B); [cpp] BOOL B = 2; NSLog (@ "BOOL -- B --> % s", B? "YES": "NO"); NSLog (@ "BOOL -- B --> % @", B? @ "YES": @ "NO"); NSLog (@ "BOOL -- B --> % d", B); [cpp] BOOL B = NO; NSLog (@ "BOOL -- B --> % s", B? "YES": "NO"); NSLog (@ "BOOL -- B --> % @", B? @ "YES": @ "NO"); NSLog (@ "BOOL -- B --> % d", B); [cpp] BOOL B =-1; NSLog (@ "BOOL -- B --> % s", B? "YES": "NO"); NSLog (@ "BOOL -- B --> % @", B? @ "YES": @ "NO"); NSLog (@ "BOOL -- B --> % d", B );