代码块又称闭包(closure),具有两种类型绑定:自动(automatic)使用栈中内存,托管(managed binding)堆内存。
代码块特征如下:
1.返回类型可声明或编译器推导
2.具有指定类型参数
3.有名称
表示如下:
<returntype>(^blockname)(list of arguments) = ^(arguments){function body;};
或者 无返回值表示如下:
void(^blockname)(list of arguments)=^(arguments){body;};
使用方法:
<type> returnresult = blockname(list of arguments); // 使用时无需^符号.
可以使用typedef 作为关键字
例如:
typedef double (^Sample) (double c, double d);
Sample multiply2 = ^(double c, double d) { return c * d; };
multiply2(4, 5);
代码块特性:
1. 可以访问 本地变量
2. 可以访问 全局变量
3. 可以访问 参数变量
4.可以访问 _block 变量 : _block 变量将本地变量设置为可变,然后代码块即可改变其值。无长度可变数组及没有包含可变长度数组结构体不能声明为_block变量。
5. 可以访问 代码内部本地变量