文章目录
OC对象 - Block内存管理
1. block从栈拷贝到堆
- 当block在栈上时,并不会对__block变量产生强引用
- 当block被copy到堆时
- 会调用block内部的copy函数
- copy函数内部会调用_Block_object_assign函数
- _Block_object_assign函数会对__block变量形成强引用(retain)
1.1 分析
- 假设有
__block变量,Block0、Block1都使用__block变量 - 此时
__block变量,Block0、Block1都是在栈上,Block0、Block1并没有对__block变量产生强引用 - 当
Block0复制到堆上时,同时会把__block变量复制到堆上,并且强引用__block变量

- 接着
Block1也复制到堆上时,在此之前__block变量已经复制到堆上了,Block1此时也会强引用__block变量

本文详细解释了OC中的Block如何从栈拷贝到堆,以及在不同情况下__block变量的强引用处理。涉及单个和多个Block持有__block变量的情况,以及__forwarding指针的作用。同时对比了__block修饰的变量与普通对象类型auto变量的内存行为。
最低0.47元/天 解锁文章
283





