Подтвердить что ты не робот

Как работает typedef-block

В C/Obj-C мы делаем typedef как это typedef int MYINT;, что ясно.

Выполнение typedef для блока - typedef void (^MyBlock) (int a);

Теперь мы можем использовать MyBlock.

Разве это не должно быть - typedef void (^MyBlock) (int a) MyBlock; похожее на #define?

Как работает синтаксис?

4b9b3361

Ответ 1

См. Объявление ссылки на блок в разделе "Темы программирования блоков":

Блочные переменные содержат ссылки на блоки. Вы объявляете их, используя синтаксис, аналогичный тому, который вы используете для объявления указателя на функцию, кроме того, что вы используете ^ вместо *.

Итак,

 typedef void (^myBlock) (int a);

определяет тип блока с использованием того же синтаксиса, что и

 typedef void (*myFunc) (int a);

объявляет указатель на функцию.

См. Для получения дополнительной информации о указателях функций см. инструкции typedefs для указателей функций в C.

Ответ 2

Также из раздела "Вопросы программирования блоков" создание типа для блоков должно быть таким:

typedef returnType (^blockName)(argument1, argument2, ...)

Ниже приведен очень простой практический пример:

typedef float (^MyBlockType)(float, float);
MyBlockType AddTwoFloat = ^(float a, float b) {return a + b;};
MyBlockType MultiplyTwoFloat = ^(float a, float b) {return a * b;};
float c = AddTwoFloat(1, 2); //c = 3
float d = MultiplyTwoFloat(1, 2); //d = 2