--------Blocks
1.Block的简单使用
//返回类型 变量名 参数列表 ^ 插入符 返回类型 参数类型 函数体
int (^blocks)(int a) = ^ int (int a) {};
(1)定义block
int (*p)(int, int);
(2)block赋值
block = ^(int age, float height){
NSLog(@"block执行了");
return 0;
};
(3)block调用
//回调
int result = block(23, 1.80);
NSLog(@"result = %d", result);
2.Block的内存管理
引用局部变量:
(1)block引用局部变量时,该变量会作为常量编码到block块中
(2)局部变量需要使用__block修饰,才能在block块中修改
即:block调用局部基本数据类型变量,进入到block里面,变量会变成常量;如果添加了关键字__block,那么在block里面变量就是同一个变量,那么我们就可以修改(我们也可以替换成static)
(3)block调用局部OC对象,该对象会被retain(注意:block在堆上才会起retain作用)
block在栈上不会做retain操作,只有当copy到堆内存中才会起作用
此时如果局部变量OC对象用__block修饰,则不会被retain
(4)在block里面引用一个实例变量时,该对象所在的对象会被retain