Ответ 1
Вы должны использовать спецификатор __block при изменении переменной внутри блока, поэтому код, который вы указали, должен выглядеть следующим образом:
__block NSString *textString;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
textString = [self getTextString];
});
Блоки фиксируют состояние переменных, на которые ссылаются внутри своих тел, поэтому захваченная переменная должна быть объявлена изменчивой. И изменчивость - это именно то, что вам нужно, учитывая, что вы в основном устанавливаете эту вещь.