深拷貝與淺拷貝

復習 copy與retain的區(qū)別:

copy是創(chuàng)建一個新對象,retain是創(chuàng)建一個指針,引用對象計數(shù)加1。Copy屬性表示兩個對象內(nèi)容相同,新的對象retain為1 ,與舊有對象的引用計數(shù)無關(guān),舊有對象沒有變化。copy減少對象對上下文的依賴。

retain屬性表示兩個對象地址相同(建立一個指針,指針拷貝),內(nèi)容當然相同,這個對象的retain值+1也就是說,retain 是指針拷貝,copy 是內(nèi)容拷貝。

1. 系統(tǒng)的非容器類對象

這里指的是NSString,NSNumber等等一類的對象。

對于系統(tǒng)的非容器類對象,我們可以認為,如果對一不可變對象復制,copy是指針復制(淺拷貝)和mutableCopy就是對象復制(深拷貝)。如果是對可變對象復制,都是深拷貝,但是copy返回的對象是不可變的。

2. 系統(tǒng)的容器類對象?

指NSArray,NSDictionary等。對于容器類本身,上面討論的結(jié)論也是適用的,需要探討的是復制后容器內(nèi)對象的變化。

在OC中,所有Foundation中的容器類,分為可變?nèi)萜骱筒豢勺內(nèi)萜鳎鼈兊目截惗际菧\拷貝。

容器拷貝的難點在于可變性的變化。容器有兩種方法:copy和mutableCopy,再次強調(diào)這兩者都是淺拷貝。它們的區(qū)別在于,返回值是否是可變的。前者返回不可變?nèi)萜鳎笳叻祷乜勺內(nèi)萜鳌?b>(摘自)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1、對象拷貝有兩種方式:淺復制和深復制。顧名思義,淺復制,并不拷貝對象本身,僅僅是拷貝指向?qū)ο蟮闹羔槪簧顝椭剖侵苯?..
    滴答大閱讀 782評論 0 2
  • 導讀 最近經(jīng)常在關(guān)注的公眾號或者技術(shù)網(wǎng)站看到關(guān)于 iOS 深拷貝與淺拷貝的話題。看到一篇技術(shù)文章,點擊收藏或者只是...
    獨木舟的木閱讀 680評論 0 8
  • 轉(zhuǎn)載一、概念與總結(jié) 1、淺拷貝 淺拷貝就是對內(nèi)存地址的復制,讓目標對象指針和源對象指向同一片內(nèi)存空間,當內(nèi)存銷毀的...
    ilmari閱讀 388評論 0 2
  • 現(xiàn)今世界上具有信任感比以前都來得濃厚,而且全球各地的人與人之間愈來愈依賴信任,因而加深了我們對信任感的興趣...
    婉緣閱讀 139評論 0 0
  • 點擊上方藍字關(guān)注「新世相」,我們終將改變潮水的方向。 一 有一句很流行的話:自古深情留不住,唯有套路得人心。 不得...
    新世相閱讀 1,285評論 3 27