Comment fonctionne typedef-un bloc fonctionne

Dans C / Obj-C, nous faisons un typedef comme ceci typedef int MYINT; ce qui est clair

Faire typedef pour un block – typedef void (^MyBlock) (int a);

Maintenant, nous pouvons utiliser MyBlock .

Ne devrait-il pas être comme – typedef void (^MyBlock) (int a) MyBlock; similaire à #define ?

Comment fonctionne la syntaxe?

Voir Déclaration d’une référence de bloc dans “Rubriques de programmation de blocs”:

Les variables de bloc contiennent des références aux blocs. Vous les déclarez en utilisant une syntaxe similaire à celle que vous utilisez pour déclarer un pointeur sur une fonction, sauf que vous utilisez ^ au lieu de *.

Alors

  typedef void (^myBlock) (int a); 

définit le type d’un bloc en utilisant la même syntaxe que

  typedef void (*myFunc) (int a); 

déclare un pointeur de fonction.

Voir par exemple Comprendre les typedefs pour les pointeurs de fonctions dans C pour plus d’informations sur les pointeurs de fonctions.

Également de “Blocs Programming Topics”, créer un type pour les blocs devrait être comme ceci:

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

Voici un exemple pratique très simple:

 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