В C/Obj-C мы делаем typedef как это typedef int MYINT;, что ясно.
Выполнение typedef для блока - typedef void (^MyBlock) (int a);
Теперь мы можем использовать MyBlock.
Разве это не должно быть - typedef void (^MyBlock) (int a) MyBlock; похожее на #define?
Как работает синтаксис?