OC 中 BOOL 和 bool 的区别
2017-08-05 本文已影响165人
StoneN
说明:
最近在写OC
时被问到,为什么我用true/false
而不用YES/NO
。原因是之前写其他语言时养成了习惯,并将这种习惯带到了OC
上。另外我暂时也未发现使用true/false
完全替代YES/NO
有何弊端。今天突然想起便仔细 Google 了这个问题,方才清楚OC
中BOOL
与bool
的区别,特此记之。
博客原文:Of BOOL and YES【感谢作者】
简单总结:
-
BOOL
is actually a signedchar
type.typedef signed char BOOL; #define YES (BOOL)1 #define NO (BOOL)0
- Avoid comparing
BOOL
toYES
.零值的 BOOL 即是 “NO”,而非零的 BOOL 并非 “YES” 除了 1。 这与我们使用 bool 是不同的:“false” 等价 0,“true” 等价于非零。
- 可在
OC
代码中使用true/false
完全替代YES/NO
,因为编译器会在两者之中自动进行正确的类型转换。尽管可能带来一些性能开销,但这些开销实在微不足道。