如何使用typedef定义块?

50
在 C/Obj-C 中,我们可以这样定义一个 typedef:typedef int MYINT;,这里很清楚明了。
现在,我们为 block 做一个 typedef - typedef void (^MyBlock) (int a); 现在,我们可以使用MyBlock
问题是,它是否应该像 #define 一样写成这样typedef void (^MyBlock) (int a) MyBlock;
对于这个语法,它的工作方式如何呢?
2个回答

67

请见"Blocks Programming Topics"中的声明块引用

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

因此

 typedef void (^myBlock) (int a);

使用与

相同的语法来定义块的类型。

 typedef void (*myFunc) (int a);

声明一个函数指针。

请参见例如了解C语言中函数指针的typedef用法等更多信息。


28

同样来自“Block编程主题”,创建一个块类型应该像这样:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接