1.什么是 ARC?
ARC 是 iOS 5 引入的内存管理新功能 – 自动引用计数 。它的工作原理大致是这样:当我们编译源码时,编译器会分析源码中每个对象的生命周期,然后基于这些对象的生命周期,来添加相应的引用计数操作代码。所以,ARC 是工作在编译期的一种技术方案。
这样的好处是:编译之后,ARC 与非 MRC 代码是没有什么差别的,所以二者可以在源码中共存。实际上,你可以通过编译参数 -fno-objc-arc 来关闭部分源代码的 ARC 特性。由于 ARC 能够深度分析每一个对象的生命周期,它能够做到比 MRC 更加高效。
例如在一个函数中,对一个对象刚开始有一个引用计数 +1 的操作,之后又紧接着有一个 -1 的操作,那么编译器就可以把这两个操作都优化掉。
2 ARC 的核心思想?
自己生成的对象,自己持有
非自己生成的对象,自己可以持有
自己持有的对象不再需要时,需要对其进行释放
非自己持有的对象无法释放
3 ARC 在使用时应该遵循的原则?
不能使用 retain、release、retainCount、autorelease。
不可以使用 NSAllocateObject、NSDeallocateObject。
必须遵守内存管理方法的命名规则。
不需要显示的调用 Dealloc。
使用 @autoreleasePool 来代替 NSAutoreleasePool。
不可以使用区域 NSZone。
对象性变量不可以作为 C 语言的结构体成员。
显示转换 id 和 void*。
4 ARC 在编译时做了哪些工作?
自动调用 保留(retain) 与 释放(release) 的方法
相对于垃圾回收