Блоки потрясающие. Поскольку я думал, что понял их, я хотел повысить ставку и использовать их в немного более сложной ситуации. Теперь эти блоки бьют меня по лицу, и я пытаюсь разбить его на понятные кусочки.
Скажем, у меня есть два блока в этом псевдокоде, которые обычно называются 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);
Теперь я попытался обернуть блок в другой блок, но, честно говоря, это просто выглядит неправильно, и казалось, что это вызывает больше проблем, чем решает. Есть ли что-то кроме упаковки блоков для отправки одного блока с одним или несколькими параметрами в основной очереди / потоке?