OC对象 - Block内存管理

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

OC对象 - Block内存管理

1. block从栈拷贝到堆

  • 当block在栈上时,并不会对__block变量产生强引用
  • 当block被copy到堆时
    1. 会调用block内部的copy函数
    2. copy函数内部会调用_Block_object_assign函数
    3. _Block_object_assign函数会对__block变量形成强引用(retain)

1.1 分析

  • 假设有__block变量Block0Block1都使用__block变量
  • 此时__block变量Block0Block1都是在栈上,Block0Block1并没有对__block变量产生强引用
  • Block0复制到堆上时,同时会把__block变量复制到堆上,并且强引用__block变量

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

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值