Block

2020-07-23  本文已影响0人  Oh丶Really

一、Block介绍

1.什么是Block

写法:


image

2、Block 的调用

二、截获变量

问题:这个结果为什么是12
image

1.变量的分类

2.针对不同变量的截获

image

三、__block 修饰符

什么情况下使用:

image

(需要)

image

(不需要)

对变量进行赋值时:

__block 修饰的的变量变换成了对象
image

四、Block 的内存管理

Block的类型:

不同类型 Block 的位置:


image

Block 的 Copy 操作

image

1.栈上 Block 的销毁

image

2.栈上 Block 的 Copy (栈上的 Block释放时,MRC 下会引起内存泄漏,因为堆上的 Block 不会进行销毁)

image

3.栈上 __block 的变量 Copy

image

3. __forwarding 存在的意义

五、Block 的循环引用

例1:

问题:


image

解决方案:


image
原理:对对象类型的局部变量连同所有权修饰符一起截获,而数组一般是用 strong 修饰,所以会引起循环引用,而改成 __weak 之后,为弱引用,所以不会引起循环引用

例2:

问题:


image

答案:

分析,ARC 下:


image

解决方案:


image
缺陷:
若 Block 一直未被调用,则循环引用会一直存在

六、总结

上一篇 下一篇

猜你喜欢

热点阅读