2011年5月15日 星期日

總結記憶體管理規則


1. 釋放物件可以清除它佔的記憶體 , 最好物件使用完後就進行釋放


2. 傳送 release 訊息並不一定可以銷燬 destory 物件!

當他的Ref. Count =0時才會被銷燬! 系統會傳送dealloc 將它的記憶體釋放


3. autorelease pool 自行釋放時 , 會提供物件的自動釋放!

系統於每次 pool 自動 release 時會傳給pool 內每個物件 release 的訊息

autorelease pool 中的任何一個物件的 Ref. Count =0 ,就會收到 dealloc的訊息 讓物件自行銷燬


4. 當你不需要方法中的物件時,可是還需要回傳它, 傳送 autorelease 訊息給他, 這不會影響他的 Ref. Count,所以這時候還可使用這個位址!

但會在 autorelease pool 時被釋放後清除


5. 無論物件是否在autorelease pool , 程式結束時都會被釋放


6. 當開發複雜的應用程式,能在程式執行期間 建立與毀滅 autorelease pool 數次,若想要在 dealloc後還可以使用該物件! 就要留意 Ref. Count 的值


7. 若直接使用 alloc copy 方法建立物件 , 便有責要將他釋放! 每次retain ,也要 release autorelease


8. 不必擔心其他方法回傳物件時的釋放問題,因為那不是你的責任!他們會自行將物件釋放, 這就是為什麼程式一開始就建立 autorelease pool!

因為像 stringWithString 這類方法會傳送autorelease訊息給新物件 , 若你沒有建立 autorelease pool 則會得到未有適當的pool將物件 autorelease的訊息


沒有留言: