У меня есть блок, который я отправляю в очередь, и я хочу, чтобы блок выполнялся только при выполнении определенного условия. Это выглядит примерно так:
bool hi = YES;
dispatch_async(queue, ^{
if (hi == YES)
do stuff;
});
Проблема в том, что если значение hi изменяется на NO за пределами блока после того, как блок был отправлен в очередь, но до того, как он был запущен, значение hi внутри блока все еще равно YES.
Я просмотрел документацию и нашел директиву __block, которая, похоже, может мне помочь, но не сработала. Я пробовал:
__block bool hi = YES;
dispatch_async(queue, ^{
if (hi == YES)
do stuff;
});
и
bool hi = YES;
dispatch_async(queue, ^{
__block boolean hi2 = hi;
if (hi2 == YES)
do stuff;
});
И ни один из них, похоже, не работает.