2010-07-12 68 views
4

目标C中的BOOL值始终为NO(默认情况下)。但是最近我遇到了BOOL变量的值返回YES的情况(默认情况下)。有人可以向我解释这一点吗?目标C中Bool的值

回答

22

BOOL没有任何价值,因为它是一种类型。

您可能是指BOOL类型的变量。有不同类型的变量,它有不同的初始化语义:

  1. 实例变量:Objective-C的alloc承诺,所有实例变量设置为零,这在BOOL的情况下,意味着NO;
  2. 全局变量:或者更确切地说,静态存储持续时间的变量被初始化为零,如C标准中所定义的。
  3. 局部变量未初始化。如果您未指定值,则其内容未指定。这也是来自C标准,可能是你偶然发现的。
+0

#3是我要发布的内容! – Wevah 2010-07-12 11:08:53

+0

这是否意味着int a在Objective C中总是不会赋值0? – mindfreak 2010-07-12 11:12:29

+0

@Mindfreak:正好。所有本地(函数作用域)变量都必须被初始化。 – 2010-07-12 11:22:35

1

如果你声明一个没有初始化的变量,操作系统将随机分配内存,并在该瞬间分配的内存可能包含一些垃圾值。那个垃圾可以表示No也可以是Yes值。

建议:始终使用正确的初始化声明变量以避免代码中的错误。