一、题目分析
使用 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方法关