iOS知识复习笔记(8)---block底层原理
2023-01-12 本文已影响0人
焦下客
block 类型
在MRC环境下
1.全局block:如果没有使用外部auto变量,或者只使用全局变量或是静态变量,则是全局block
2.栈block:如果使用了外部auto变量,则是栈block
3.堆block:栈block调用了copy
在ARC环境下
1.全局block:如果没有使用外部auto变量,或者只使用全局变量或是静态变量,则是全局block
2.栈block:如果使用了外部auto变量,会从栈block拷贝到堆block
3.堆block:访问了外部auto变量的block,并进行的copy操作
auto 修饰变量,block会捕获,并且是值传递,内部无法修改值。
static 修饰变量,block会捕获,并且是指针传递,内部可以修改值。
全局变量,block不会捕获,是直接获取值。
使用__weak 修饰可以解决循环引用问题
使用__block 修饰auto变量,内部是变成一个结构体,结构体内部包含变量的指针,所以就可以实现在block内部修改auto变量的值了。