Objective c BOOL的默认值

Objective c BOOL的默认值,objective-c,initialization,boolean,Objective C,Initialization,Boolean,Objective-C中BOOL变量的默认值是多少?如果您写入 -(void)somemethod { BOOL x; // <--- no default value -(void)somemethod{ BOOL x;//我自己用Xcode 5.1、OS x Mavericks 10.9.4做了一些实验。对于那些不知道ALog是一个修改过的NSLog的人来说,第一个实验是使用isLandscape作为公共变量,使用@synthesis,由父视图控制器访问(如下所示)。第二个实验

Objective-C中
BOOL
变量的默认值是多少?

如果您写入

-(void)somemethod {
  BOOL x;  // <--- no default value
-(void)somemethod{

BOOL x;//我自己用Xcode 5.1、OS x Mavericks 10.9.4做了一些实验。对于那些不知道ALog是一个修改过的NSLog的人来说,第一个实验是使用
isLandscape
作为公共变量,使用
@synthesis
,由父视图控制器访问(如下所示)。第二个实验没有使用
@synthesis
,显然,我在控制台中使用了
self.isLandscape
来获得相同的结果。控制台输出低于我的代码。第三个实验使用“isLandscape”作为方法内部的局部变量

@interface MyClass : UIView // (subclass used in my UIViewController)
…
@property (nonatomic) BOOL isLandscape;  // < - - - testing this BOOL
…

@implementation MyClass
…
@synthesize isLandscape;

- (void)awakeFromNib
{
    [super awakeFromNib];
    // Test for YES or NO
    if (isLandscape == YES) {
        ALog(@"isLandscape == YES");
    } else if (isLandscape == NO) {
        ALog(@"isLandscape == NO");
    } else {
        ALog(@"isLandscape != YES/NO");
    }
    // Test for nil or non-nil
    if (isLandscape) {
        ALog(@"isLandscape");
    } else if (!isLandscape) {
        ALog(@"!isLandscape");
    } else {
        ALog(@"!= nil/non-nil");
    }
    // Test its value
    ALog(@"isLandscape == %d", isLandscape);
}
在第三个实验中,“isLandscape”不再是一个属性。我将其设置为一个局部变量,结果很有趣:

- (void)awakeFromNib
{
    [super awakeFromNib];
    BOOL isLandscape; // < - - - testing this BOOL
    // Test for YES or NO
    if (isLandscape == YES) {
        ALog(@"isLandscape == YES");
    } else if (isLandscape == NO) {
        ALog(@"isLandscape == NO");
    } else {
        ALog(@"isLandscape != YES/NO");
    }
    // Test for nil or non-nil
    if (isLandscape) {
        ALog(@"isLandscape");
    } else if (!isLandscape) {
        ALog(@"!isLandscape");
    } else {
        ALog(@"!= nil/non-nil");
    }
    // Test its value
    ALog(@"isLandscape == %d", isLandscape);
}

我猜属性是由我或Xcode自动初始化的,但局部变量根本没有值。即使如此,请看[164行]局部变量不是是或否,而是非nil?我猜它是(随机的)你不能指望的垃圾值。我希望这对下一个人有所帮助。我学到了一些东西,但我期待着发表评论。谢谢,祝你好运!

你能指望非ivar布尔始终是同一个垃圾吗?还是它不同?(即,我看到它在NSlog语句中计算为整数值“2”)@bentford的ivar被初始化为
NO
,如上所述。我想你的意思是var.似乎很琐碎,但非常重要!谢谢!!@KennyTM“非对象类型,如启用了ARC的BOOL,仍将被初始化为垃圾”。你确定吗?你提供的链接说“分配对象时,Objective-C对象的实例变量总是设置为0(或零)”,我找不到任何其他更清晰的引用,所以这对我来说有点矛盾。在我的例子中,BOOL局部变量设置为0,这是否。但在发布模式下构建时,它将是是是。
- (void)awakeFromNib
{
    [super awakeFromNib];
    BOOL isLandscape; // < - - - testing this BOOL
    // Test for YES or NO
    if (isLandscape == YES) {
        ALog(@"isLandscape == YES");
    } else if (isLandscape == NO) {
        ALog(@"isLandscape == NO");
    } else {
        ALog(@"isLandscape != YES/NO");
    }
    // Test for nil or non-nil
    if (isLandscape) {
        ALog(@"isLandscape");
    } else if (!isLandscape) {
        ALog(@"!isLandscape");
    } else {
        ALog(@"!= nil/non-nil");
    }
    // Test its value
    ALog(@"isLandscape == %d", isLandscape);
}
2014-08-28 08:28:33.483 MyApp[581:60b] -[MyClass awakeFromNib] [Line 159] isLandscape != YES/NO
2014-08-28 08:28:33.486 MyApp[581:60b] -[MyClass awakeFromNib] [Line 164] isLandscape
2014-08-28 08:28:33.487 MyApp[581:60b] -[MyClass awakeFromNib] [Line 172] isLandscape == -24