1. 简介
* Block封装了一段代码,可以在任何时候执行
* Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值
2. 使用
1> 定义一个无返回值且没有形参的block
void (^myBlock)() = ^(){ // 由于这里没有形参,也可以省略后面的 () // ... }; // 利用block变量调用block内部的代码 myBlock();
2> 定义一个有返回值、有形参的block
int (^sumBlock)(int, int) = ^(int a,int b) { return a+b; }; // 调用该block sumBlock(3, 5);
3. 注意
* block内部可以访问外面的变量
* 默认情况下,block内部不能修改外面的局部变量
* 给局部变量加上 __block关键字,这个局部变量就可以在block内部修改
int a = 10; __block int b = 20; void (^block)(); block = ^{ a = 30; // error 可访问,当不可修改 b = 35; }; block();
4. 利用typedef定义block类型
typedef int (^MyBlock)(int, int); // 以后就可以利用MyBlock这种类型来定义block变量 MyBlock block; block = ^(int a, int b) { return a + b; }; // 调用block block(3, 5);
时间: 2024-11-05 22:33:05