ARC __block локальная переменная не очищается - PullRequest
0 голосов
/ 11 ноября 2011

Насколько я понимаю, в 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" );
}

Iпытался сделать это как часть более крупного модульного теста, который нуждался в переменной __block.Я связал это с этим очень простым примером.

Стоит ли ожидать, что ARC очистит переменную __block в этом случае?

enter image description here

1 Ответ

2 голосов
/ 12 ноября 2011

Насколько я понимаю, ARC автоматически инициализирует локальные переменные стека, если они являются указателями на сохраняемые объекты и , у них есть сильная, слабая или автоматически высвобождающая квалификация.

То есть все остальные локальные объекты, включаяпримитивы, подобные тому, что есть у вас, будут неинициализированы, как всегда.

...