iOS 深拷貝,淺拷貝與集合類的對(duì)象,深拷貝實(shí)現(xiàn)

先上代碼github,如有錯(cuò)誤請(qǐng)幫忙指出,謝謝!轉(zhuǎn)載請(qǐng)注明出處,喜歡的話,請(qǐng)點(diǎn)個(gè)贊吧!

一、概念

1、淺拷貝 = 指針拷貝:多了一個(gè)指針,指向同一塊內(nèi)存地址(同一個(gè)對(duì)象)。
2、深拷貝 = 內(nèi)容拷貝:多了一個(gè)指針,指向不同的內(nèi)存地址(不同的對(duì)象)。

二、總結(jié)
    1、對(duì)于不可變的非集合類的對(duì)象,copy是淺拷貝,mutableCopy是深拷貝。
    2、對(duì)于可變的非集合類的對(duì)象,copy和mutableCopy都是深拷貝。
    3、對(duì)于不可變的數(shù)組,字典等集合類的對(duì)象,copy是淺拷貝,mutableCopy是深拷貝。
    4、對(duì)于可變的數(shù)組,字典等集合類的對(duì)象,copy和mutableCopy都是深拷貝。

注:集合類的對(duì)象深拷貝拷貝的是本身對(duì)象,不包含里面的元素等對(duì)象,可以實(shí)現(xiàn)完全深拷貝整個(gè)集合對(duì)象請(qǐng)看下面代碼解釋

三、代碼解釋

1、不可變的非集合類對(duì)象

image.png

2、可變的非集合類對(duì)象
image.png

3、不可變的集合類對(duì)象
image.png

4、可變的集合類對(duì)象
image.png

5、集合類對(duì)象的object的拷貝情況
注:集合類對(duì)象要實(shí)現(xiàn)對(duì)象里面的object也拷貝需要執(zhí)行如下方法

1、- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag;
/// 還有更多的歸檔解檔擴(kuò)展方法,具體請(qǐng)自行了解NSKeyedUnarchiver 
2、+ (nullable id)unarchivedObjectOfClass:(Class)cls fromData:(NSData *)data error:(NSError **)error

從下圖可以得出結(jié)論,不支持NSCopying,NSMutableCopying協(xié)議的例如NSString,NSNumber拷貝后object的地址還是一致,沒有真正的復(fù)制一個(gè)出來,不過支持NSCopying,NSCoding的協(xié)議的object都能進(jìn)行真正的深拷貝。
image.png

image.png
image.png
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 深拷貝內(nèi)存拷貝 淺拷貝指針拷貝 淺拷貝 深拷貝 集合的淺復(fù)制 (shallow copy) 集合的淺復(fù)制有非常多種...
    lucdwy閱讀 846評(píng)論 0 1
  • 在工作中,有時(shí)會(huì)涉及到深拷貝和淺拷貝的內(nèi)容,發(fā)現(xiàn)有些地方理解的不夠透徹,所以在網(wǎng)上搜集資料總結(jié)一下,主要分四個(gè)方面...
    LeverTsui閱讀 3,648評(píng)論 3 5
  • 很多人面試中都被或多或少問到一些內(nèi)存管理相關(guān)的知識(shí),說到內(nèi)存管理在 ARC 環(huán)境下就避不開 assign、weak...
    BenXia閱讀 3,419評(píng)論 0 4
  • 對(duì)于不可變的集合類對(duì)象進(jìn)行 copy 操作,只是改變了指針,其內(nèi)存地址并沒有發(fā)生變化;進(jìn)行 mutableCopy...
    魔性佛心閱讀 746評(píng)論 0 0
  • 首先提出一個(gè)問題 @property聲明的NSString(或NSArray,NSDictionary),為什么經(jīng)...
    hanzhansen閱讀 518評(píng)論 0 4

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