*block 代码块 闭包(一个区域) 与C语言函数类似
*block 具有反向传值、回调的功能
回调:执行完毕之后返回再去执行
反向传值:回调的时候给它一个值
*它分为声明实现和调用两部分
声明:声明有这么一个类型的block (会执行这一步)
实现:只要不主动调用就不会执行
调用:当调用的时候会返回去执行实现的部分
*block 可以当参数也可以当变量使用
1、block声明和实现
2、分析回调 反向传值
3、当做变量使用
4、当做参数使用
5、当做属性使用 解决block的内存循环引用
6、让block代替代理
#pragma mark---block 的公式---
1、声明实现 写到一块的公式
*返回值类型 (^block名字)(参数列表:参数类型 参数名)= ^(参数列表:参数类型 参数名){
实现代码
(如果有返回值 需要return返回值类型的值)
}
*调用: block名字(参数);
2、声明实现分开的公式
(1)声明
返回值类型 (^block名字)(参数列表);
(2)实现
block名字 = ^(参数列表){
实现的内容 (如果有返回值return)
}
(3)调用
block名字(实参);
****先实现后调用 不能未写实现就调用
@() 转成NSNumber 类型 字典不能存int类型
#pragma mark---__block---
*__block:修饰词 修改block之外变量内容的修饰词
***如果不加__block 就不允许在block方法里面修改外部变量的值 就算是赋值 得到的也只是修改之前的值
*__weak: 修饰词 弱引用 用它修饰的变量都是不安全的变量 -> 告诉编译器 可以释放这个对象
*变量的名字在栈里面
*修改不是局部变量的值的时候(涉及到对象)使用__weak 修饰 把不能销毁的对象用一个临时变量替换
*修改是局部变量的值的时候用__block
网友评论