我的理解是在ARC下应该清除局部变量(设置为0)。但是,我有一个简单的情况,当使用__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变量?
答案 0 :(得分:2)
我的理解是ARC会自动初始化堆栈局部变量,如果它们是可保留对象的指针和它们具有强,弱或自动释放的限定条件。
因此,所有其他本地人,包括像你这里所拥有的原始人一样,都会像往常一样未被初始化。