Cocoa的內存管理:retain,release和autorelease.
每個對象都維護一個保留計數器。對象被創建時,其保留計數器值為1;對象被保留時,保留計數器值加1;對象被釋放時,保留計數器值減1;當保留計數器值歸0時,對象被銷毀。在銷毀對象時,首先調用對象的dealloc方法,然后回收其占用的內存以供其他對象使用。
當對象接收到一條autorelease消息時,其保留計數器值并不立馬改變。相反,該對象只是被放入NSAutoreleasePool中。當自動釋放池被銷毀時,會身池中的所有對象發送release消息。所有被自動釋放的對象都將其保留計數器值減1.如果保留計數器值歸0,則對象被銷毀。當使用AppKit時,Objective-C會在適當的時間為你創建和銷毀自動釋放池,例如在當前用戶事件處理完畢時。除此以外,你要負責創建自己的自動釋放池,Foundation庫工具的模板包含了這些代碼。
Cocoa中關于對象及其保留計數器的3條規則。
1,如果使用new,alloc或copy操作獲得一個對象,則該對象的保留計數器值為1.
2,如果通過任何其它方法獲得一個對象,則假設該對象的保留計數器值為1,而且已經被設置為自動釋放。
3,如果保留了某個對象,則必須保持retain方法和release方法的使用次數相等。
參考資料:《Object-C基礎教程》
新聞熱點
疑難解答