Локальная переменная ARC __block не очищается

Насколько я понимаю, в 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 в этом случае?

введите здесь описание изображения


person Tod Cunningham    schedule 11.11.2011    source источник
comment
Очищает ли ARC только те переменные стека, которые являются объектами?   -  person Tod Cunningham    schedule 11.11.2011


Ответы (1)


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

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

person Firoze Lafeer    schedule 11.11.2011