typedef-ing块如何工作?

use*_*227 46 typedef objective-c objective-c-blocks

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

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

现在,我们可以使用MyBlock.

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

语法如何工作?

Mar*_*n R 66

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

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

所以

 typedef void (^myBlock) (int a);
Run Code Online (Sandbox Code Playgroud)

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

 typedef void (*myFunc) (int a);
Run Code Online (Sandbox Code Playgroud)

声明一个函数指针.

有关函数指针的更多信息,请参阅例如,了解C中函数指针的typedef.


fuj*_*471 23

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

typedef returnType (^blockName)(argument1, argument2, ...)
Run Code Online (Sandbox Code Playgroud)

下面是一个非常简单的实际例子:

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
Run Code Online (Sandbox Code Playgroud)