iOS - block

*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);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容