1. ARC 工作原理详述
ARC是OC编译器的特性,而不是运行时特性或者垃圾回收机制,ARC所做的只不过是在代码编译时为你自动在合适的位置插入release或autorelease.
ARC的判断准则:
只要没有强指针指向对象,对象就会被释放。
注意:当使用ARC的时候,暂时忘记“引用计数器”,因为判断标准变了。
代理示例:
情况1:
代码如上,当程序运行到22行,Car类被释放。原因:
在15行到21行,都有强指针指向Car创建的类bigBen,当出了@autoreleasepool的大括号,指针bigBen作为局部变量被释放了,所以就没有强指针指向Car创建的类,所以Car类就被释放了。
情况2:
指针bigBen在第17行被置为空了。
那么,运行17行以后,指针的指向发生改变,Car对象就被释放了,而且是立即释放了,而不是出了@autoreleasepool的大括号才被释放的,因为没有强指针指向它了。
情况3:
添加了第18行代码。
这样执行到22行时,Car对象不会被释放,因为还有一个强指针 bmw指向它。
情况4:
正如注释中所写,要注意一点,weak指针会在对象被释放后被置为空。