2010-05-27 98 views

回答

161

没有默认值,如果你写

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

它被初始化为垃圾。

但是,对于一个BOOLivar,它将被初始化为NO,因为整个实例在初始化时被填充为0。

(注:当ARC被启用,本地对象指针总会有一个默认值nil,但非对象类型,如BOOL的局部变量仍然初始化为垃圾见Local variables set to nil? (Objective-C)

+1

你能指望非伊娃尔布尔永远是相同的垃圾?或者它有什么不同? (即我看到它在NSlog语句中计算为'2'的整数值) – bentford 2010-10-30 15:42:43

+8

@bentford:不,你不能。 – kennytm 2010-10-30 15:48:55

+0

@bentford如上所述,伊娃被初始化为“否”。我认为你的意思是var。 – 2011-12-15 21:31:47

19

我使用Xcode 5.1,OS X Mavericks 10.9.4做了一些我自己的实验。对于那些不知道ALog的人来说是修改后的NSLog。无论如何,第一个实验是使用isLandscape作为公共变量,@synthesize由父视图控制器访问(如下所示)。第二个实验没有使用@synthesize和I,显然,使用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); 
} 

这些结果来自在前两个实验...

2014-08-28 08:18:52.909 MyApp[493:60b] -[MyClass awakeFromNib] [Line 157] isLandscape == NO 
2014-08-28 08:18:52.911 MyApp[493:60b] -[MyClass awakeFromNib] [Line 166] !isLandscape 
2014-08-28 08:18:52.912 MyApp[493:60b] -[MyClass awakeFromNib] [Line 172] isLandscape == 0 

在第三个实验“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); 
} 

这些结果是从第三个实验......

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 

我猜性能得到由我或Xcode的自动初始化,但局部变量根本没有任何价值。即使如此,看看[Line 164]局部变量不是YES或NO,但它不是零?我想这是(随机)垃圾值,你不能指望。我希望这有助于下一个人。我学到了一些东西,但我期待着评论。谢谢,祝你好运!