2011-11-11 83 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將自動初始化堆棧局部變量當且僅當它們指向保留性對象他們有強,弱,或自動釋放資格。

因此,所有其他本地人,包括像你這裏的原始人,都將像往常一樣被初始化。