objective-c笔记:垃圾回收和自动引用计数

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版本,就不可以恢复了。