2011-11-11 48 views
0

我的理解是,ARC下的局部变量应该被清除(设置为0)。但是,我有一个简单的情况,在使用__block修饰符时,局部变量不会被清除。ARC __block局部变量不清除

这是一些显示问题的简单单元测试。

- (void)testARCLocalVarClear 
{ 
    FLPuzzleManager *puzzleManager = [[FLPuzzleManager alloc] init]; 
    __block bool  loadDone; 

    NSLog(@"value of loadDone = %d", loadDone); 

    STAssertFalse(loadDone, @"ARC should have set loadDone to 0"); 
} 

我试图执行此作为所需的__block变量较大的单位测试的一部分。我将它与这个非常简单的例子进行了配对。

我应该期望ARC在这种情况下清除__block变量吗?

enter image description here

+0

ARC是否仅预先清除作为对象的堆栈变量? –

回答

2

我的理解是,ARC将自动初始化堆栈局部变量当且仅当它们指向保留性对象他们有强,弱,或自动释放资格。

因此,所有其他本地人,包括像你这里的原始人,都将像往常一样被初始化。