Только с утверждением выше модификатор __block ничего не сделает.Однако в контексте блока __block позволяет блокам, определенным в этом методе, мутировать переменную.
__block NSString *myString = @"My string";
NSLog(@"myString: %@", myString);
dispatch_async(dispatch_get_main_queue(), ^{
myString = @"My string changed.";
});
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"myString: %@", myString);
});
В этом примере блоки могут изменить myString для указания новой переменной.Это аналогично передаче переменной по ссылке.Если я уберу модификатор __block из объявления myString, я получу компиляцию, в которой будет сказано: «Переменная не присваивается (отсутствует спецификатор типа __block).