Block 相关知识

Block 相关知识_第1张图片
image.png

1、什么是block

Block 是将函数及其执行上下文封装起来的对象

2、block截获对象


Block 相关知识_第2张图片
image.png
a、对于基本数据类型的局部变量截获其值。
b、对于对象类型的局部变量连同所有权修饰符一起截获。
c、以指针形式截获局部静态变量。
d、不截获全局变量、静态全局变量.

3、在什么情况下需要使用__block修饰符?

一般情况下,对被截获变量进行赋值操作需要使用__block
Block 相关知识_第3张图片
image.png

Block 相关知识_第4张图片
image.png

Block 相关知识_第5张图片
image.png

Block 相关知识_第6张图片
image.png

Block 相关知识_第7张图片
image.png

Block 相关知识_第8张图片
image.png

4、为什么block会产生循环引用?
a、当前block对当前对象的某一成员变量的进行截获,那么这个block对这个变量就有了一个强引用,当前block由于当前对象对其有一个强引用,就会产生一种自循环引用,我们可以将其变量声明为__weak来解决
b、如果我们定义一个__block也是会产生循环引用但是需要区分场景:
一种是ARC下可以产生但是MRC下不会,同时在ARC下我们通过段环方式来解决。但是有弊端若这个Block一直没有调用这个循环引用就一直存在。
5、你都遇见过哪些循环引用?你又是怎样解决的?

会遇见blcok引起循环引用:block捕获当前对象一个成员变量同时block也是其
成员变量,通过__weak来避免;__block也会引起,通过断闭环来解决。

你可能感兴趣的:(Block 相关知识)