Подтвердить что ты не робот

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

В моем коде dispash_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];
});

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

4b9b3361

Ответ 1

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

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

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