ARC是自iOS 5之后增加的新特性,基本消除了手动管理内存的烦琐,编译器会自动在适当的地方插入当的retain、release、autorelease语句。你基本不再需要担心内存管,这里说的是基本,不是全部,为什么呢,后面的会讲到。
- ARC是编译器(时)特性,而不是运行时特性,更不是垃圾回收器(GC),而是编译器特性。这是面试的时候经常被问到
- 实现原理:
RAC通过控制变量的作用域和强弱指针的限制, - 规则:
ARC的规则:只要有一个强指针变量只想对象,对象就会保持在内存中不会被释放 - 强/弱指针:
ARC模式下默认所有实例变量都是强指针,强指针持有对象
弱指针指向的对象呗回收后,弱指针回制动复制为nil
在ARC有效的情况下编译源代码,必须遵守一定的规则。下面的就是具体的ARC的具体规则。
- 不能使用使用retain/release/retainCount/autorelease
- 不能使用NSAllocateObject/NSDeallocateObject
- 必须遵守北村管理方法命名规则
- 不要显示调用dealloc
- 使用@autoreleasepool块替代NSAutoreleasePool
- 不能使用区域(NSZone)
- 对象型变量作为c语言结构体(struct/union)的成员
- 显示转换“id”和“void”