<4>内存管理--block数据类型
1. block的作用:block可以封装一段代码,可以在任何时候执行(在程序运行时保存一段代码,而函数不行,函数要事先编写好)
2. block的标志:^
3. block跟函数很像
1> 保存一段代码
2> 可以有返回值
3> 可以有形参(可以接收参数)
4> 调用方式一样
4. 定义block变量
void (^myblock)() = ^{ // block所要保存的代码 }; // 没有返回值,没有形参;定义并赋值
myblock(); // 利用block变量调用block内部的代码
int (^sumblock)(int, int) = ^(int a, int b){ // 求和代码 }; //有返回值,有形参;定义并赋值
int sum = sumblock(10, 10); // 利用block变量调用block内部的代码
void (^block)(); // 只定义了block变量
block = ^{ // 对block变量赋值
// 代码
};
注意:
1.block内部可以访问外面的变量
2.默认情况下,block内部不能修改外面的局部变量(注意这里说的时局部变量),如果确实想要修改外面的局部变量,那么外面的局部变量在定义的时候加上一个 __block 关键字
5. 自定义一个block类型
typedef int (^MyBlock)(int, int); // 这样就可以用 MyBlock 来代替 int (^MyBlock)(int, int),现在MyBlock就是一个数据类型, 所以最好首字母大写
所以可以用MyBlock来定义形式相同的变量
MyBlock sumblock;
MyBlock minusblock;
sumblock = ^(int a, int b){
return a + b;
};
minusblock = ^(int a, int b){
return a - b;
};