2013-03-09 3 views
38

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

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

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

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

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

ответ

59

Declaring a Block Reference См в разделе "Блоки Темы Программирование":

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

Так

typedef void (^myBlock) (int a); 

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

typedef void (*myFunc) (int a); 

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

См., Например, Understanding typedefs for function pointers in C для получения дополнительной информации о указателях функций.

17

Кроме того, из «Blocks Темы Программирование», создавая тип для блоков должен быть таким:

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 
+0

Простой и понятный Фрагмент кода – Jasmeet

Смежные вопросы