Objective-c中對象的Copy、MutableCopy、淺拷貝、深拷貝

來源:互聯網
上載者:User

標籤:oc copy   oc mutable copy   淺拷貝   深拷貝   

對象的複製就是複製一個對象作為副本,他會開闢一塊新的記憶體(堆記憶體)來儲存副本對象,就像複製檔案一樣,即來源物件和副本對象是兩塊不同的記憶體地區。對象要具備複製功能,必須實現<NSCopying>協議或者<NSMutableCopying>協議,常用的可複製對象有:NSNumber、NSString、NSMutableString、NSArray、NSMutableArray、NSDictionary、NSMutableDictionary

copy:產生對象的副本是不可變的

mutableCopy:產生的對象的副本是可變的


淺拷貝和深拷貝

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

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

Foundation中支援複製的類,預設是淺複製


對象的自訂拷貝

    對象擁有複製特性,須實現NSCopying,NSMutableCopying協議,實現該協議的CopyWithZone:方法或MutableCopyWithZone:方法。

淺拷貝實現

[cpp] view plaincopyprint?
  1. -(id)copyWithZone:(NSZone *)zone{  
  2.              
  3.            Person *person = [[[self Class]allocWithZone:zone]init];  
  4.            p.name = _name;  
  5.            p.age = _age;  
  6.            return person;  
  7.        }  

深拷貝的實現

[cpp] view plaincopyprint?
  1. -(void)copyWithZone:(NSZone *)zone{  
  2.             Person *person = [[[self Class]allocWithZone:zone]init];  
  3.             person.name = [_name copy];  
  4.             person.age = [_age copy];  
  5.             return person;  
  6.               
  7.         }  

深淺拷貝和retain之間的關係

   copy、mutableCopy和retain之間的關係

   Foundation中可複製的對象,當我們copy的是一個不可變的對象的時候,它的作用相當與retain(cocoa做的記憶體最佳化)

   當我們使用mutableCopy的時候,無論來源物件是否可變,副本是可變的

    當我們copy的 是一個可變對象時,複本不可變

Objective-c中對象的Copy、MutableCopy、淺拷貝、深拷貝

相關文章

聯繫我們

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