iOS 中的深copy和淺copy理解?

一、概念與總結(jié)

1、淺拷貝

淺拷貝就是對(duì)內(nèi)存地址的復(fù)制,讓目標(biāo)對(duì)象指針和源對(duì)象指向同一片內(nèi)存空間,當(dāng)內(nèi)存銷毀的時(shí)候,指向這片內(nèi)存的幾個(gè)指針需要重新定義才可以使用,要不然會(huì)成為野指針。

淺拷貝

淺拷貝就是拷貝指向原來(lái)對(duì)象的指針,使原對(duì)象的引用計(jì)數(shù)+1,可以理解為創(chuàng)建了一個(gè)指向原對(duì)象的新指針而已,并沒(méi)有創(chuàng)建一個(gè)全新的對(duì)象。

2、深拷貝

深拷貝是指拷貝對(duì)象的具體內(nèi)容,而內(nèi)存地址是自主分配的,拷貝結(jié)束之后,兩個(gè)對(duì)象雖然存的值是相同的,但是內(nèi)存地址不一樣,兩個(gè)對(duì)象也互不影響,互不干涉。

深拷貝

深拷貝就是拷貝出和原來(lái)僅僅是值一樣,但是內(nèi)存地址完全不一樣的新的對(duì)象,創(chuàng)建后和原對(duì)象沒(méi)有任何關(guān)系。

3、總結(jié):

深拷貝就是內(nèi)容拷貝,淺拷貝就是指針拷貝。本質(zhì)區(qū)別在于:

  • 是否開(kāi)啟新的內(nèi)存地址

  • 是否影響內(nèi)存地址的引用計(jì)數(shù)


二、準(zhǔn)則

No1:可變對(duì)象的copy和mutableCopy方法都是深拷貝(區(qū)別完全深拷貝與單層深拷貝) 。

No2:不可變對(duì)象的copy方法是淺拷貝,mutableCopy方法是深拷貝。

No3:copy方法返回的對(duì)象都是不可變對(duì)象

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于iOS中對(duì)象的深拷貝和淺拷貝的文章有很多,但是大部分都是基于打印內(nèi)存地址來(lái)推導(dǎo)結(jié)果,這篇文章是從源碼的角度來(lái)分...
    雪山飛狐_91ae閱讀 1,010評(píng)論 1 5
  • 前言 不敢說(shuō)覆蓋OC中所有copy的知識(shí)點(diǎn),但最起碼是目前最全的最新的一篇關(guān)于 copy的技術(shù)文檔了。后續(xù)發(fā)現(xiàn)有新...
    zyydeveloper閱讀 3,704評(píng)論 4 35
  • 1、對(duì)象拷貝有兩種方式:淺復(fù)制和深復(fù)制。顧名思義,淺復(fù)制,并不拷貝對(duì)象本身,僅僅是拷貝指向?qū)ο蟮闹羔槪簧顝?fù)制是直接...
    滴答大閱讀 847評(píng)論 0 2
  • 參考文獻(xiàn)《招聘一個(gè)靠譜的iOS》 深拷貝和淺拷貝 由上面的圖我們可以明確地看出, 淺拷貝(Shallow copy...
    Terrnce閱讀 1,926評(píng)論 2 10
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,621評(píng)論 1 32

友情鏈接更多精彩內(nèi)容