布尔类型

Objective-C中的BOOL实际上是一种对带符号的字符类型(signed char)的类型定义(typedef) 它使用8位的储存空间。通过#define指令把YES定义为1,NO定义为0.

Objective-C并不会把BOOL作为仅能保存YES或NO值得真正布尔类型来处理。编译器仍将BOOL认作8位二进制数,YES和NO值只是习惯上的一个理解。这样会引发一个小问题:如果不小心将一个大于一字节的整型值(比如short或int)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。如果该低位字节刚好为0(比方说8960,写成16进制为0x2300),BOOL值会被认作是0,即NO值。


不要将BOOL值和YES直接作比较。因为虽然大于0的值在c语言判断为真值,但是在Objective-C中它不等于YES(YES的值以整型表示为1)。

BOOL  a = YES;

if (a == YES){};  (错误)

if (a) {};(正确)

相反的BOOL值直接与NO比较一定是安全的,因为NO在C和Objective-C中只有一个值0.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容