Objective-C邊學邊記-13:Cocoa記憶體管理規則 與 記憶體回收(garbage collection)

來源:互聯網
上載者:User

4.Cocoa記憶體管理規則
1)當你使用new、alloc、copy方法建立一個對象時,該對象的保留計數器值為1.當不再使用該對象時,你要負責向該對象發送一條release或autorelease訊息。這樣,該對象將在其使用壽命結束時被銷毀。
2)當你通過其他方法獲得一個對象時,這假設該對象的保留計數器值為1,而且已經被設定為自動釋放,你不需要執行任何操作來確保該對象被清理。如果你打算在一段時間內擁有該對象,這需要保留它並確保在操作完成時釋放它。
3)如果你保留了某個對象,你需要(最終)釋放或自動釋放該對象。必須保持retain方法和release方法的使用次數相等。

 

如果我使用了new、alloc或copy方法獲得一個對象,則我必須釋放或自動釋放該對象。”只要你記住了這條規律,你就平安無事了。
無論什麼時候擁有一個對象,有兩間事情必須弄清楚:怎樣獲得該對象的?打算擁有該對象多長時間。

例如:

NSMutableArray *array;
array = [[NSMutableArray alloc] init]; //count: 1
// use the array
[array release]; // count: 0

上例中使用alloc方法獲得了array,所以需要安排該對象的釋放([array release])

又如:

NSMutableArray *array;
array = [NSMutableArray arrayWIthCapacity: 17];
// count: 1, autoreleased
// use the array

 

上例中的arrayWithCapacity: 方法不屬於alloc、new、copy中的任何一個,因此可以假設該對象被返回時保留計數器值為1而且已經被設定為自動釋放。你不需要顯示釋放array。

5.記憶體回收(garbage collection)
Objective-C2.0引入了自動記憶體管理機制,也稱記憶體回收。對於已經建立和使用的對象,當你忘記清理它們時,系統會自動識別哪些對象仍在使用,哪些對象可以回收。
記憶體回收是一種可選擇啟用的功能,啟用方法是:在菜單選擇Project | Edit Project Settings進入項目資訊視窗,搜尋“garb”,選擇Required[-fobjc-gc-only]選項即可。如所示:

 

“-fobjc-gc”選項是為了使代碼即支援記憶體回收又支援對象的保留和釋放。
啟用記憶體回收後,通常的記憶體管理命令全部變成了空操作指令,不執行任何操作。
注意:如果開發iPhone軟體,則不能使用記憶體回收。實際上,在編寫iPhone程式時,蘋果公司建議你不要在自己的代碼中使用autorelease方法,同時還要避免使用建立自動釋放對象的便利函數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.