49

在 C/Obj-C 中,我们执行这样的 typedef,typedef int MYINT;这很清楚。

为一个块做 typedef -typedef void (^MyBlock) (int a);

现在,我们可以使用MyBlock.

它不应该像 -typedef void (^MyBlock) (int a) MyBlock;类似于#define吗?

语法如何工作?

4

2 回答 2

66

请参阅“块编程主题”中的声明块引用:

块变量保存对块的引用。您可以使用类似于声明指向函数的指针的语法来声明它们,不同之处在于您使用 ^ 而不是 *。

所以

 typedef void (^myBlock) (int a);

使用与以下相同的语法定义块的类型

 typedef void (*myFunc) (int a);

声明一个函数指针。

有关函数指针的更多信息,请参见了解 C 中函数指针的 typedef 。

于 2013-03-09T13:12:11.597 回答
28

同样来自“块编程主题”,为块创建类型应该是这样的:

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
于 2015-04-11T16:53:01.833 回答