解開對copy茄猫、mutableCopy,深復(fù)制和淺復(fù)制的疑惑

一困肩、深拷貝划纽,淺拷貝

對象拷貝有兩種方式:淺復(fù)制和深復(fù)制。顧名思義僻弹,淺復(fù)制阿浓,并不拷貝對象本身他嚷,僅僅是拷貝指向?qū)ο蟮闹羔槪?深復(fù)制是除了拷貝指向?qū)ο蟮闹羔樚U溃抑苯涌截愓麄€對象內(nèi)存到另一塊內(nèi)存中。
再簡單些說:淺復(fù)制就是指針拷貝筋蓖;深復(fù)制就是內(nèi)容拷貝卸耘。
淺copy: 指針復(fù)制,不會創(chuàng)建一個新的對象粘咖。深copy: 內(nèi)容復(fù)制蚣抗,會創(chuàng)建一個新的對象。

二瓮下、非集合類的對象 shallow copy 和 deep copy

在非集合類對象中:
對immutable對象進(jìn)行copy操作翰铡,是指針復(fù)制,mutableCopy操作時內(nèi)容復(fù)制讽坏;
對mutable對象進(jìn)行copy和mutableCopy都是內(nèi)容復(fù)制锭魔。
用代碼簡單表示如下:
[immutableObject copy] // 淺復(fù)制 + 不可變對象
[immutableObject mutableCopy] //深復(fù)制 + 可變對象
[mutableObject copy] //深復(fù)制 + 不可變對象
[mutableObject mutableCopy] //深復(fù)制 + 可變對象

三、集合類的對象自身的 shallow copy 和 deep copy

在集合類對象中路呜,對immutable對象進(jìn)行copy迷捧,是指針復(fù)制织咧,mutableCopy是內(nèi)容復(fù)制;
對mutable對象進(jìn)行copy和mutableCopy都是內(nèi)容復(fù)制漠秋。
但是:集合對象的內(nèi)容復(fù)制僅限于對象本身笙蒙,對象元素仍然是指針復(fù)制。用代碼簡單表示如下:
[immutableObject copy] // 淺復(fù)制 + 不可變對象[immutableObject mutableCopy] //單層深復(fù)制 + 可變對象[mutableObject copy] //單層深復(fù)制 + 不可變對象[mutableObject mutableCopy] //單層深復(fù)制 + 可變對象

四庆锦、集合類的對象中元素的 one-level-deep copy 捅位、two-level-deep copy 和 real-deep copy

1、集合類的對象中的元素為 Foundation 架構(gòu)下的

1)單層深復(fù)制
對(集合類) 對象自身執(zhí)行深copy搂抒,對 (集合類)對象內(nèi)部的元素 執(zhí)行淺copy绿渣,稱為集合類的單層深復(fù)制。
2)雙層深copy
這里的雙層指的NSArray對象一層 和 NSArray容器內(nèi)對象 的一層
3)完全深復(fù)制 (完美copy)
如果想 完美的解決NSArray嵌套NSArray這種情形燕耿,使用歸檔中符、解檔的方式

2、集合類的對象中的元素為 Custom對象

1)單層深復(fù)制  (demo:OC_Copy3_1)
對比之前的 NSString誉帅,我們需要遵守NSCopying, NSMutableCopying淀散,才可以進(jìn)行copy和mutableCopy 操作集合類對象自身執(zhí)行了深copy,集合類對象中的元素執(zhí)行淺copy
2)雙層深copy  (demo:OC_Copy3_2蚜锨,OC_Copy3_3)
這里的雙層指的NSArray對象一層 和 NSArray容器內(nèi)對象 的一層
3)完全深復(fù)制 (完美copy)  (demo:OC_Copy3_4)
如果想 完美的解決NSArray嵌套NSArray這種情形档插,使用歸檔、解檔的方式
對于自定義的類亚再,需要遵循NSCoding協(xié)議
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末郭膛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子氛悬,更是在濱河造成了極大的恐慌则剃,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件如捅,死亡現(xiàn)場離奇詭異棍现,居然都是意外死亡,警方通過查閱死者的電腦和手機镜遣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門己肮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悲关,你說我怎么就攤上這事谎僻。” “怎么了寓辱?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵艘绍,是天一觀的道長。 經(jīng)常有香客問我讶舰,道長鞍盗,這世上最難降的妖魔是什么需了? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮般甲,結(jié)果婚禮上肋乍,老公的妹妹穿的比我還像新娘。我一直安慰自己敷存,他們只是感情好墓造,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锚烦,像睡著了一般觅闽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涮俄,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天蛉拙,我揣著相機與錄音,去河邊找鬼彻亲。 笑死孕锄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苞尝。 我是一名探鬼主播畸肆,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宙址!你這毒婦竟也來了轴脐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抡砂,失蹤者是張志新(化名)和其女友劉穎振惰,沒想到半個月后佳吞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體王财,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡舌剂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年气破,在試婚紗的時候發(fā)現(xiàn)自己被綠了聊浅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡现使,死狀恐怖低匙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碳锈,我是刑警寧澤顽冶,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站售碳,受9級特大地震影響强重,放射性物質(zhì)發(fā)生泄漏绞呈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一间景、第九天 我趴在偏房一處隱蔽的房頂上張望佃声。 院中可真熱鬧,春花似錦倘要、人聲如沸圾亏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽志鹃。三九已至,卻和暖如春泽西,著一層夾襖步出監(jiān)牢的瞬間曹铃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工捧杉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铛只,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓糠溜,卻偏偏與公主長得像淳玩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子非竿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

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