Objective-C的記憶體管理

來源:互聯網
上載者:User

標籤:需要   cti   property   自動   資源   ase   變數   引用計數器   object   

一、Objective-C記憶體管理的對象

1. 實值型別:比如int、float、struct等基礎資料型別 (Elementary Data Type)。

  • 實值型別會被放入棧中,在記憶體中佔有一塊連續的記憶體空間,遵循先進後出的原則,故不會產生片段。
  • 由系統分配管理

2. 參考型別:Objective-C的對象

  • 參考型別會被放到堆中,記憶體配置按照一定的分配演算法,但無論演算法多優,總會產生片段。
  • 記憶體的分配和釋放由程式員操作管理

3. 實值型別和參考型別之間的相互轉化

  • 裝箱:把實值型別轉化為參考型別的過程叫做裝箱,如把int封裝為NSNumber。
  • 拆箱:把參考型別轉為實值型別的過程叫做拆箱,如把NSNumer轉為int。

二、Objective-C記憶體管理的對象的方法

1. 引用計數

  • 表示對象被引用的次數,通過它可以判斷對象是否被回收。
  • 如果引用計數為0,對象回收,不為0則不回收。
  • 當對象執行alloc、new、copy或者retain時,引用計數加1,release時,引用計數減1。

三、Objective-C管理記憶體的方式

1. 手動記憶體管理機制:MRC

  • MRC模式下,所有的對象都需要手動的添加retain、release代碼來管理記憶體。
  • 使用MRC,需要遵守誰建立,誰回收的原則。也就是誰alloc,誰release;誰retain,誰release。
  • 當引用計數為0的時候,必須回收,引用計數不為0,不能回收,如果引用計數為0,但是沒有回收,會造成記憶體泄露。如果引用計數為0,繼續釋放,會造成野指標。為了避免出現野指標,我們在釋放的時候,會先讓指標置為nil。

2. 自動記憶體管理機制:ARC

1)ARC模式下的property變數修飾詞

  • 強引用strong:相當於retain,使用之後,計數器值+1。
  • 弱引用weak:相當於assign,使用不會改變計數器的值,指標指向的地址被釋放後,會自動置為nil。
  • retain:引用計數值+1,即對象持有人的個數+1。
  • assign:設定變數時使用,不設計引用計數。
  • copy:拷貝對象。
  • readwrite與readonly:限制訪問者的許可權。
  • atomic與nonatomic:原子操作與非原子操作。原子操作適用於多線程,對共用資源的安全訪問。非原子操作多用於非多線程,可以提高效能。

 2)自動釋放池

自動記憶體釋放使用@autoreleasepool關鍵字聲明一個代碼塊,如果一個對象在初始化時調用了autorelase方法,那麼當代碼塊執行完之後,在塊中調用過autorelease方法的對象都會自動調用一次release方法。這樣一來就起到了自動釋放的作用,同時對象的銷毀過程也得到了延遲(統一調用release方法)。

  1. autorelease方法不會改變對象的引用計數器,只是將這個對象放到自動釋放池中; 
  2. 自動釋放池實質是當自動釋放池銷毀後調用對象的release方法,不一定就能銷毀對象(例如如果一個對象的引用計數器>1則此時就無法銷毀); 
  3. 由於自動釋放池最後統一銷毀對象,因此如果一個操作比較佔用記憶體(對象比較多或者對象佔用資源比較多),最好不要放到自動釋放池或者考慮放到多個自動釋放池; 
  4. ObjC中類庫中的靜態方法一般都不需要手動釋放,內部已經調用了autorelease方法;

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.