1、什么是block
Block 是将函数及其执行上下文封装起来的对象
2、block截获对象
a、对于基本数据类型的局部变量截获其值。
b、对于对象类型的局部变量连同所有权修饰符一起截获。
c、以指针形式截获局部静态变量。
d、不截获全局变量、静态全局变量.
3、在什么情况下需要使用__block修饰符?
一般情况下,对被截获变量进行赋值操作需要使用__block
4、为什么block会产生循环引用?
a、当前block对当前对象的某一成员变量的进行截获,那么这个block对这个变量就有了一个强引用,当前block由于当前对象对其有一个强引用,就会产生一种自循环引用,我们可以将其变量声明为__weak来解决
b、如果我们定义一个__block也是会产生循环引用但是需要区分场景:
一种是ARC下可以产生但是MRC下不会,同时在ARC下我们通过段环方式来解决。但是有弊端若这个Block一直没有调用这个循环引用就一直存在。
5、你都遇见过哪些循环引用?你又是怎样解决的?
会遇见blcok引起循环引用:block捕获当前对象一个成员变量同时block也是其
成员变量,通过__weak来避免;__block也会引起,通过断闭环来解决。