Block :带有自动变量的函数
语法:
^返回值类型(参数列表){函数表达式}
返回值类型可以省略 ^(参数列表){函数表达式}
参数列表 如果没有值 也可以省略 ^{函数表达式}
//声明Block
返回值类型 (^变量名)(参数列表) = Block表达式
void(^block1)(NSString *a,NSString *b);//没有返回值
//声明Block变量跟赋值 一起
int(^blcok)(int)=^(int a){
return a*3;
};
NSLog(@"*************%d***************",blcok1(2));
//输出结果 *************6***************
//Block 我用到的主要是传值跟传递方法两个目的
传值的控制器 声明 block
![](https://img.haomeiwen.com/i2935823/562fe7d6cd53c9ad.png)
需要传值的地方调用
![](https://img.haomeiwen.com/i2935823/2e1a5b660b2dc034.png)
得到值的控制器 接收
![](https://img.haomeiwen.com/i2935823/ff6e52ae6583b465.png)
得到的结果:我要的结果block也不是特别难========
到这里就实现了 传值的过程!
__block __weak 修饰词 区别
1.__block 能修饰对象也能修饰基本数据类型 __weak 能修饰对象不能修饰基本数据类型
2.__block 对象可以在block中被重新赋值 __weak 不可以
3.__block 对象在ARC下可能会导致循环引用 非ARC下会避免循环引用
__weak 只在ARC下使用,可以避免循环引用
默认情况,无法修改block捕获的变量,但是__block却可以,__block 都做了什么。
默认情况下,block拷贝进去的是变量的值,加了__block 之后,block里面的就是变量的内存地址。
网友评论