黑馬程式員_IOS開發_Objective-C學習筆記_記憶體管理

來源:互聯網
上載者:User

標籤:

1.記憶體管理概述

1.1什麼是記憶體管理:記憶體管理是程式設計中常用的資源管理的一部分,每個電腦系統可供程式使用的記憶體都是有限的。


1.2為什麼要使用記憶體管理:當我們的程式運行結束的時候,作業系統將回收其我們程式佔用記憶體。但是,只要程式還在運行,它就會一直佔用記憶體。如果不進行及時清理不用的記憶體,記憶體最終將被耗盡。每個程式都會使用記憶體,我們必須確保在需要的時候分配記憶體,而在程式運行結束時釋放佔用的記憶體。如果我們只分配而不釋放記憶體,將發生記憶體流失。

1.3引用計數
1.3.1隻有當你對一個對象了alloc,copy或retain等操作以後,你才擁有它的引用。
1.3.2當你不需要這個對象時,你應當釋放你對他的引用。
1.3.3你不可以對你沒有引用的對象執行釋放操作。

IOS一旦出現記憶體不足的情況,ios平台會通知所有已經啟動並執行APP,不論是前台APP還是後台掛起的APP,都會收到 memory warning 的notice 一旦APP收到 memory waring 的 notice 就應該回收佔用記憶體較大的變數。

1.4 記憶體警報處理
1、程式收到系統發來 memory waring
2、程式釋放佔用較大的記憶體。
3、系統回收此程式所建立的atutorelease的對象。

2.記憶體管理

2.1手工引用計數和自動釋放池
手工管理記憶體的範圍:任何繼承了NSObject 的對象,並且使用了alloc、copy、mutableCopy和New為首碼的方法建立的對象都不會被自動釋放,則需要進行手動管理。


引用計數:對象被建立的時候預設帶有4個自己的引用計數器,並且預設的值為1,當引用計數的值為0的時候,對象將被系統銷毀。


擷取引用計數:給對象發送 retainCount訊息獲得當前的引用計數,傳回值是無符號長整型,可以使用如下語句列印:

NSLog(@“%zi”,[person retainCount]);

 

獲得引用
alloc:為一個新對象分配記憶體,並將它的引用計數置為1.調用alloc方法你便擁有了新對象的所有權。

retain:是對象的引用計數+1,並獲得對象的引用。

釋放引用
release:是對象的引用計數減1。

autorelease:是對象的引用計數在未來的某個時候減1,而當前引用計數並沒有變。

當引用計數為0的時候,系統則會自動調用繼承自NSObject的 dealloc 方法,釋放所記憶體,然後為了能夠釋放由對象建立或保持的執行個體變數或者其他對象,需要複寫Dealloc方法,但是不建議直接調用dealloc方法,因為這個是由系統進行調用的。

記憶體管理原則
*誰建立,誰釋放,如果你通過alloc、new或copy來建立一個對象,那麼你必須調用release或autorelease。
*一般來說,除了alloc、new或copy之外的方法建立的對象都被聲明了autorelease。
*誰retain,誰release。只要你調用了retain,無論這個對象是如何產生的,你都要調用release。

黑馬程式員_IOS開發_Objective-C學習筆記_記憶體管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.