IOS開發之深拷貝與淺拷貝(mutableCopy與Copy)詳解

來源:互聯網
上載者:User

標籤:

深淺拷貝的基本概念和用法

  基本概念

  淺拷貝紙複製對象的本身,對象裡的屬性、包含的對象不做複製

  深拷貝則既複製對象本身,對象的屬性也會複製一份。

  Foundation 架構中支援複製的類,預設是淺拷貝。

  copy和mutabelCopy

  1. 一個對象使用copy和mutabelCopy方法可以建立對象的副本
  2. copy - 需要先實現NSCoppying協議,建立的是不可變副本(如NSString、NSArray、NSDictionary)
  3. mutabelCopy - 需要先實現NSMutabelCopying協議,建立的是可變副本,(如NSMutabelString、NSMutabelArray、NSMutabelDictionary)
  4. 深複製:內容拷貝,來源物件和副本指向的是不同的兩個對象。來源物件引用計數器不變,副本計數器設定為1
  5. 淺複製:指標拷貝,來源物件和副本指向的是同一個對象。對象的引用計數器+1,其實相當於做了一次retain操作
  6. 只有不可變對象建立不可變副本(copy)才是淺複製,其他都是深複製

舉例:對象的自訂拷貝

對象擁有複製特性,須實現NSCopying、NSMutabelCopying協議,實現該協議的copyWithZone:方法和mutabelCopyWithZone:方法

代碼:

深淺拷貝的不同實現;程式碼範例

  Objective - C 對象的深淺拷貝的區別就在於你對copyWithZone的不同實現

 

深淺拷貝和 retain之間的總結

  copy、mutabelCopy 和 retain 之間的關係

  • Foundation 可複製的對象,當我們copy的是一個不可變的對象時,他的作用相當於retain (cocoa做得記憶體最佳化)
  • 當我們使用mutabelCopy 時 ,無論來源物件師傅可變,副本是可變的,並且實現了真正意義上得拷貝
  • 當我們copy 的是一個可變對象時,副本對象是不可變的,同樣實現了真正意義上的拷貝

 

Foundation 的一些常見複製的案例

 

IOS開發之深拷貝與淺拷貝(mutableCopy與Copy)詳解

聯繫我們

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