it-swarm.com.ru

Невозможно получить доступ к глобальным переменным в dispatch_async: «Переменная не присваивается (отсутствует спецификатор типа _block)»

В моем коде dispach_async block я не могу получить доступ к global variables. Я получаю эту ошибку Variable is not Assignable (missing _block type specifier).

NSString *textString;

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
   (unsigned long)NULL), ^(void) {
        textString = [self getTextString];
});

Может ли кто-нибудь помочь мне выяснить причину?

49
Vaquita

Вы должны использовать спецификатор __block, когда изменяете переменную внутри блока, поэтому код, который вы дали, должен выглядеть следующим образом:

 __block NSString *textString;
 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
                                                 (unsigned long)NULL), ^(void) {
      textString = [self getTextString];
});

Блоки фиксируют состояние переменных, на которые ссылаются их тела, поэтому захваченная переменная должна быть объявлена ​​изменяемой. А изменчивость - это именно то, что вам нужно, учитывая, что вы по сути настраиваете эту вещь.

137
CodaFi