iOS经典面试题之使用runtime associate方法关联的对象释放及dealloc底层原理

本文详细分析了iOS中使用runtime associate方法关联的对象在dealloc时的释放过程,包括object_dispose()的调用,C++析构函数、释放关联属性和弱引用的处理,揭示了ARC下关联对象的自动清理机制。
摘要由CSDN通过智能技术生成
一、题目分析

使用 runtime associate 方法关联的对象,需要在主对象 dealloc 的时候释放吗?

  • 无论在 MRC 下还是 ARC 下均不需要,被关联的对象在生命周期内要比对象本身释放的晚很多,它们会在被 NSObject - dealloc 调用的 object_dispose() 方法中释放。
  • 调用 release :引用计数变为零,对象正在被销毁,生命周期即将结束,不能再有新的 __weak 弱引用,否则将指向 nil,调用 [self dealloc]。
  • 父类调用 dealloc:继承关系中最直接继承的父类再调用 -dealloc,如果是 MRC 代码则会手动释放实例变量们(iVars),继承关系中每一层的父类都再调用 dealloc。
  • NSObject 调用 dealloc:只做一件事:调用 Objective-C runtime 中object_dispose() 方法。
  • 调用 object_dispose():
    • 为 C++ 的实例变量们(iVars)调用 destructors;
    • 为 ARC 状态下的实例变量们(iVars) 调用 release;
    • 解除所有使用 runtimeAssociate方法关
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

╰つ栺尖篴夢ゞ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值