1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1.调用 -release :引用计数变为零
* 对象正在被销毁,生命周期即将结束.
* 不能再有新的 __weak 弱引用,否则将指向 nil.
* 调用 [self dealloc]
2. 父类调用 -dealloc
* 继承关系中最直接继承的父类再调用 -dealloc
* 如果是 MRC 代码 则会手动释放实例变量们(iVars)
* 继承关系中每一层的父类 都再调用 -dealloc
3. NSObject 调 -dealloc
* 只做一件事:调用 Objective-C runtime 中的 object_dispose() 方法
4. 调用 object_dispose()
* 为 C++ 的实例变量们(iVars)调用 destructors
* 为 ARC 状态下的 实例变量们(iVars) 调用 -release
* 解除所有使用 runtime Associate方法关联的对象
* 解除所有 __weak 引用
* 调用 free()

参考链接

大致意思:
1.ARC下对象的成员变量于编译器插入的.cxx_desctruct方法自动释放
2.ARC下[super dealloc]方法也由编译器自动插入,自动调用
3.dealloc内部有一步执行objc_clear_deallocating 方法将weak指向当前对象的变量都置为nil