淺拷貝和深拷貝

深拷貝:深拷貝就是把內(nèi)容拷貝一份產(chǎn)生一份新的對(duì)象,新對(duì)象計(jì)數(shù)器為1,源對(duì)象計(jì)數(shù)器不變。

淺拷貝:而淺拷貝是指針拷貝,把地址給你,你和我指向同一個(gè)對(duì)象,源對(duì)象計(jì)數(shù)器加一,源對(duì)象和副本的計(jì)數(shù)器相同。

我們知道在OC中的拷貝函數(shù)有copy和mutablecopy:

copy

只要你調(diào)用了copy不管是NSString, NSDictionary還是NSArray還是NSMutableString還是NSMutableDictionary,還是NSMutableArray都是copy出來(lái)是不可變的副本。

如果是不可變對(duì)象進(jìn)行copy的話就相當(dāng)于淺拷貝,沒(méi)有產(chǎn)生一個(gè)新的對(duì)象相當(dāng)于retain操作了,因?yàn)镺C設(shè)置copy語(yǔ)法本身就是為了改變副本而不去影響源對(duì)象,所以為了性能著想既然copy出來(lái)的都不可變了,自然也就不會(huì)產(chǎn)生一個(gè)新的對(duì)象了。

如果是可變對(duì)象進(jìn)行copy的話就相當(dāng)于深拷貝,因?yàn)榭勺儗?duì)象變成了不可變對(duì)象了,結(jié)構(gòu)上發(fā)生了改變??偨Y(jié)來(lái)說(shuō)就是只有不可變對(duì)象調(diào)用copy為淺拷貝其他都是深拷貝。

mutablecopy

當(dāng)你調(diào)用mutablecopy產(chǎn)生的都是可變的副本??勺儗?duì)象和不可變對(duì)象進(jìn)行mutablecopy都是產(chǎn)生了一個(gè)新的對(duì)象,計(jì)數(shù)器為1,原來(lái)的對(duì)象計(jì)數(shù)器不變。

總結(jié):可變對(duì)象的copy和mutableCopy方法都是深拷貝,而且都是是單層拷貝也就是說(shuō)我有個(gè)數(shù)組a和數(shù)組b,我讓數(shù)組b = [a copy]或者 b = [a mutableCpoy],雖然b的地址和a的地址不同,但是其里面的數(shù)組元素的地址和原數(shù)組里面的對(duì)象的地址還是相同的,也就是說(shuō)數(shù)組內(nèi)容還是指向原數(shù)組里面的元素的。

如果我們想讓一個(gè)類的對(duì)象進(jìn)行拷貝操作就要讓這個(gè)類要實(shí)現(xiàn)NSCopying或者NSMutableCopying協(xié)議。然后我們還要在類的.m文件中實(shí)現(xiàn)-(id)copyWithZone:(NSZone *)zone方法,其中zone指向新的一塊存儲(chǔ)空間,是系統(tǒng)已經(jīng)給我們分配的內(nèi)存。具體實(shí)現(xiàn)如下:


?著作權(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)容

  • 對(duì)于不可變的集合類對(duì)象進(jìn)行 copy 操作,只是改變了指針,其內(nèi)存地址并沒(méi)有發(fā)生變化;進(jìn)行 mutableCopy...
    魔性佛心閱讀 748評(píng)論 0 0
  • 淺拷貝: Making a shallow copy: NSArray *shallowCopyArray = [...
    煙雨平生花飛舞閱讀 646評(píng)論 0 0
  • 一.概念 1.淺拷貝 淺拷貝就是對(duì)內(nèi)存地址的復(fù)制,讓目標(biāo)對(duì)象指針和源對(duì)象指向同一片內(nèi)存空間,當(dāng)內(nèi)存銷毀的時(shí)候,...
    倫倫子_f7b3閱讀 406評(píng)論 0 1
  • 深拷貝和淺拷貝這個(gè)問(wèn)題在面試中常常被問(wèn)到,而在實(shí)際開(kāi)發(fā)中,只要稍有不慎,就會(huì)在這里出現(xiàn)問(wèn)題。尤其對(duì)于初學(xué)者來(lái)說(shuō),我...
    weyan閱讀 561評(píng)論 0 1
  • 一 學(xué)習(xí)與實(shí)踐 1 付出不亞于任何人的努力 2要謙虛不要驕傲 3要每天反省 4活著就要感謝 5積善行,思利他 6不...
    grace2039閱讀 73評(píng)論 0 2

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