objective-c 2.0引入了自动内存管理机制,也被称为垃圾回收。
启用垃圾回收后,平常的内存管理命令全部变成了空操作指令。
启用垃圾回收,需要在build setting里面选择Required[-fobjc-gc-only]选项。
与自动释放池一样,垃圾回收器也是在时间循环结束时触发的。
垃圾回收功能只支持OS X应用开发,无法用在iOS应用程序上。
自动引用计数(automatic reference counting, ARC)
如果你启用了ARC,只管像平常那样按需分配并使用对象,编译器会帮你插入retain和release语句,无需你自己动手。
强引用和弱引用:
当指针指向某个对象时,你可以管理它的内存(通过retain和release),也可以不管理。
如果你管理了,就拥有对这个对象的强引用。
如果你没管理,就拥有对这个对象的弱引用。
归零弱引用:在指向的对象被释放后,这些弱引用就会被设置为零(nil)
归零弱引用通过声明变量时使用_week关键字或者对属性使用week特性。
强引用是通过声明变量时候使用_strong关键字或者对属性使用strong特性。
注意,内存管理关键字和特性是不能一起使用的,两者相互排斥。
使用ARC的时候:
1. 属性不能以new开头。
2. 属性不能只有一个read-only而没有内存管理特性。
垃圾回收机制和ARC无法一同使用。
ARC转换是一个单程的操作。一旦你转换成ARC版本,就不可以恢复了。