Objective-C 內存管理原則
內存管理方針
用於內存管理的基本模型采用引用計數的環境之中提供的組合方法中定義在NSObject協議和標准方法的命名約定。NSObject類也定義了一個方法:dealloc,當調用一個對象時自動回收,本文描述了Cococa程序中你需要知道的基本規則,同時提供了許多正確的使用示例
基本的內存管理規則方針
內存管理模型是基於對象的所有權。任何對象都可能有一個或者多個所有者,只要一個對象至少還有一個所有者,就讓他繼續存在,如果一個對象沒有所有者,正在運行的系統就會把它自動消滅。為了清楚的確保你是否擁有一個對象,Cocoa制定了以下政策:
你擁有所有你創建的對象
你可以通過“alloc”、 “new”、“copy”或者“mutableCopy” (例如alloc、 newObject、 或者 mutableCopy)等方法去創建一個對象
你可以通過“retain”去獲取一個對象的所有權
一個被收到的對象通常保證依然有效當他在這個方法內被接收時,這個方法也可以安全的返回調用程序對象。你可以在兩種下使用“retain”:(1)、在一個訪問方法的實現方法或者“init”方法時,為了獲取你想要作為一個屬性值去存儲的一個對象的所有權。(2)、為了防止一個對象因為一些其他的操作後果而從此被失效(如用來解釋避免你正在使用的對象重新分配單元)
當你不再需要他的時候,你必須放棄你所擁有的對象的所有權
你通過給它發送一個release消息或者一個autorelease消息來放棄一個對象的所有權。在Cococa術語中,放棄一個對象的所有權通常稱為“釋放”對象
你不能釋放一個不是你所擁有的對象的所有權
這僅僅是上述政策規則的必然結果,明確的規定