*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
#pragma mark---block高级部分----
把block作为参数-全局变量
{
void(^block)(NSString*text);
}
*把block当做方法的参数传递
声明:
方法的公式:- (返回值类型)方法名:(参数)形参
block声明:返回值类型(^block名字)(参数列表);
block当参数:- (返回值类型)方法名:(block参数)形参
最终形态:- (返回值类型)方法名:(返回值类型(^)(参数列表))block名字
调用:在方法中去调用block
- (返回值类型)方法名:(返回值类型(^)(参数列表))block名字{
block名字(实参);
}
实现:调用方法的时候系统自动提示实现代码
在.h文件使用typedef用一个名字替代整个block的声明
以后resultBlock代表整个block
typedefvoid(^resultBlock)(NSDictionary *info);