Блоки классные. Поскольку я думал, что понимаю их, я хотел повысить ставки и использовать их в более сложной ситуации. Сейчас эти блоки бьют меня по лицу, и я пытаюсь разбить их на понятные части.
Скажем, у меня есть два блока в этом псевдокоде, удобно названные blockA
и blockB
. Первый - это простой блок без параметров, который просто печатает строку. Второй принимает один параметр xyz
типа id
:
void (^blockA){ NSLog(@"Doing something"); };
void (^blockB)(id xyz){ [xyz doSomething]; };
При запуске blockA
я бы сделал что-то вроде blockA();
, или когда я хочу настроить таргетинг на основную очередь / поток, я использую метод dispatch_sync
или _async
:
dispatch_sync(dispatch_get_main_queue(), blockA);
Но хотя я знаю, как отправлять blockB
с параметром типа blockB(someObject);
, я не могу понять, как явно вызвать его в основном потоке. Я искал что-то вроде следующей строки, но, конечно, это не, как это работает:
dispatch_sync (dispatch_get_main_queue, blockB, someObject);
Теперь я попытался обернуть блок другим блоком, но, честно говоря, это выглядело неправильно, и мне казалось, что это вызывает больше проблем, чем решает. Есть ли что-то кроме упаковки блоков для отправки одного блока с одним или несколькими параметрами в основной очереди / потоке?