iOS知识复习笔记(8)---block底层原理

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变量的值了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容