AutoReleasepool и dispatch_async - PullRequest
       33

AutoReleasepool и dispatch_async

3 голосов
/ 28 октября 2011

Я прочитал статью о GCD, и есть пример:

dispatch_queue_t bgQueue = myQueue;
dispatch_async(dispatch_get_main_queue(), ^{
    NSString *stringValue = [[[textField stringValue] copy] autorelease];
    dispatch_async(bgQueue, ^{
        // use stringValue in the background now
    });
});

Если я помещу этот метод в обработчик клика (который будет вызываться в автозапуске), потеряю ли я stringValue, потому что автозапуск будет уничтожен после события клика?

1 Ответ

9 голосов
/ 28 октября 2011

Внутри этого внутреннего блока?Нет, вы не потеряете это значение.Когда переменная объекта Objective C (которая не была объявлена ​​как __block) упоминается внутри блока, и блок копируется, этот объект автоматически сохраняется.Когда блок освобожден, этот объект также будет освобожден.dispatch_async() отвечает за копирование и освобождение блока.

...