iOS拷貝(深拷貝&淺拷貝)

什么是文件拷貝

我們在使用電腦的時候,經(jīng)常會有一個操作,就是ctrl+c和ctrl+v,就是拷貝。

這個拷貝的結(jié)果,就是產(chǎn)生一個副本,該副本與源文件完全一致,而且兩者互不影響。

修改源文件,不會影響副本文件,而修改副本文件也不會影響源文件。

我們也將這種操作成為克隆

什么是對象拷貝

對象拷貝與文件拷貝類似,新對象與源對象互不影響

深拷貝&淺拷貝

淺拷貝:指針拷貝

深拷貝:堆內(nèi)容拷貝

ios拷貝的兩種方式

1.copy不可變拷貝,產(chǎn)生不可變副本(劃重點)

2.mutableCopy可變拷貝,產(chǎn)生可變副本(劃重點)

拷貝結(jié)果


NSArray的拷貝結(jié)果

? ??

自定義對象類型

對象類型要想支持拷貝,就需要實現(xiàn)NSCopying接口,自定義對象的copy或者mutablecopy都是深拷貝,也就是內(nèi)存拷貝

自定義容器對象

對容器對象中的數(shù)據(jù)進行深拷貝,只能使用alloc initwitharray copyItems:yes?

不過一般來說不建議這樣做,nsarray數(shù)據(jù)對象太大,深拷貝導(dǎo)致內(nèi)存讀寫太頻繁,在上層進行深拷貝,就不需要alloc太大的內(nèi)存空間,性能更快

引申

本文描述的是ios的深淺拷貝,其實,c/c++/python/js/java等各個語言都有深淺拷貝。其原理也很簡單:

淺拷貝是指針拷貝,深拷貝是副本拷貝。

如果理解變量的創(chuàng)建過程,就能順理成章的理解了,那就是創(chuàng)建變量意味著棧中和堆中都開辟空間,堆中存儲變量值,棧中存儲指針,指向堆中的值


變量的創(chuàng)建



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

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