typedef-ing块如何工作?

时间:2013-03-09 12:52:28

标签: objective-c objective-c-blocks typedef

在C / Obj-C中,我们做了一个类似于typedef int MYINT;的typedef,这很清楚。

为块执行typedef - typedef void (^MyBlock) (int a);

现在,我们可以使用MyBlock

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

语法如何工作?

2 个答案:

答案 0 :(得分:64)

请参阅“块编程主题”中的Declaring a Block Reference

  

块变量保存对块的引用。你声明他们使用   语法类似于用于声明指向函数的指针,   除了你使用^而不是*。

所以

 typedef void (^myBlock) (int a);

使用与

相同的语法定义块的类型
 typedef void (*myFunc) (int a);

声明一个函数指针。

参见例如Understanding typedefs for function pointers in C有关函数指针的更多信息。

答案 1 :(得分:22)

同样来自" Blocks Programming Topics",为块创建类型应该是这样的:

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