本章接受了cocoa的内存挂你方法:retain、release和autorelease。
每个对象都维护一个保留计数器。对象被创建时,其保留计数器值1;对象被保留时,保留计数器值加1;对象被释放时,保留计数器值减1;当保留计数器值归0时,对象被销毁。在销毁对象时,首先调用对象的dealloc方法,然后回收其占用的内存以供其它对象使用。
当对象接收一条autorealse消息时,其保留计数器并不立即改变。相反,该对象只被放入NSAutoreleasePool中。当自动释放池被销毁时,会向池中的所有对象发送release消息,所有被自动释放的对象都将其保留计数器值减1。如果保留计数器值归0,则对象被销毁。当使用AppKit时,Objective-C会在适当的时间为你创建和销毁自动释放池,例如在当前用户事件处理完毕时。除此之外,你要负责创建自己的自动释放池,Foundation库工具的模板包含了这些代码。
Cocoa中关于对象及其保留计数器的3条规则:
如果使用new、alloc或copy操作获得一个对象,则该对象的保留计数器值为1.
如果通过任何其它方法获得一个对象,则假设该对象的保留计数器值为1,而且已经被设置为自动释放。
如果保留了某个对象,则必须保持retain方法和release方法使用的次数相等。