深拷貝和淺拷貝以及使對(duì)象能夠拷貝的條件

1茂嗓、使對(duì)象具有拷貝功能

在自定義的類里面實(shí)現(xiàn)NSCopying協(xié)議和NSMutableCopying協(xié)議餐茵,若沒有實(shí)現(xiàn)這兩個(gè)協(xié)議的話,在實(shí)例化對(duì)象后調(diào)用copy/mutableCopy會(huì)報(bào)錯(cuò)在抛。

為什么要使用copy钟病?

copy是創(chuàng)建一個(gè)新對(duì)象,retain是創(chuàng)建一個(gè)指針刚梭,引用對(duì)象計(jì)數(shù)加1。copy屬性表示兩個(gè)對(duì)象內(nèi)容相同票唆,新的對(duì)象引用為1?朴读,與舊有對(duì)象的引用計(jì)數(shù)無關(guān),舊的對(duì)象并沒有變化走趋。copy減少對(duì)象對(duì)上下文的依賴衅金。copy過后的新對(duì)象會(huì)開辟新的內(nèi)存空間。

對(duì)于系統(tǒng)的非容器類對(duì)象(NSArray、NSMutableArray氮唯、NSDictionary鉴吹、NSMutableDictionary等),可以認(rèn)為惩琉,如果對(duì)一不可變對(duì)象復(fù)制豆励,copy是指針復(fù)制(淺拷貝)而mutableCopy就是對(duì)象復(fù)制(深拷貝)。如果是對(duì)可變對(duì)象復(fù)制瞒渠,都是深拷貝良蒸,但是copy返回的對(duì)象是不可變的。

copy:對(duì)于可變對(duì)象為深復(fù)制伍玖,引用計(jì)數(shù)不改變;對(duì)于不可變對(duì)象是淺復(fù)制嫩痰。引用計(jì)數(shù)每次+1。始終返回一個(gè)不可變對(duì)象窍箍。

mutableCopy:始終是深復(fù)制串纺,引用計(jì)數(shù)不改變。始終返回一個(gè)可變對(duì)象

那么先讓我們來看一看下數(shù)組類型的轉(zhuǎn)換

1椰棘、不可變對(duì)象→可變對(duì)象的轉(zhuǎn)換:

???????NSArray?*arr1= [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",nil];

?????NSMutableArray?*arr2=[arr1?mutableCopy];

2纺棺、可變對(duì)象→不可變對(duì)象的轉(zhuǎn)換:

????NSMutableArray?*array1 ? = [NSMutableArray?arrayWithObjects:@"a1",@"b1",@"c1",@"d1",nil];

???????NSArray?*array2=[?array1 ? Copy];

3、可變對(duì)象→可變對(duì)象的轉(zhuǎn)換(不同指針變量指向不同的內(nèi)存地址)

???????NSMutableArray?*array1= [NSMutableArray?arrayWithObjects:@"a",@"b",@"c",@"d",nil];

?????NSMutableArray?*array2=[array1?mutableCopy];

通過上邊的兩個(gè)例子晰搀,我們可輕松的將一個(gè)對(duì)象在可變和不可變之間轉(zhuǎn)換五辽,并且這里不用考慮內(nèi)存使用原則(即引用計(jì)數(shù)的問題)。沒錯(cuò)外恕,這就是深拷貝的魅力了杆逗。

4、同類型對(duì)象之間的指針復(fù)制(不同指針變量指向同一塊內(nèi)存地址):

??a鳞疲、

?NSMutableString?*str1=[NSMutableString?stringWithString:@"two day"];

???NSMutableString?*str2=[str1??retain];

b罪郊、

???NSArray?*array1= [NSArray arrayWithObjects:@"a",@"b",@"c",@"d",nil];

???NSArray?*str2=[array1?Copy];


?通俗的講,多個(gè)指針同時(shí)指向同一塊內(nèi)存區(qū)域尚洽,那么這些個(gè)指針同時(shí)擁有對(duì)該內(nèi)存區(qū)的所有權(quán)悔橄。所有權(quán)的瓜分過程,這時(shí)候就要用到淺拷貝了腺毫。

可以把上面所有的問題則簡(jiǎn)化如下:

什么時(shí)候用到深淺拷貝癣疟?

深拷貝(mutableCopy)是在要將一個(gè)對(duì)象從可變(不可變)轉(zhuǎn)為不可變(可變)或者將一個(gè)對(duì)象內(nèi)容克隆一份時(shí)用到;

淺拷貝(copy)是在要復(fù)制一個(gè)對(duì)象的指針時(shí)用到潮酒。

對(duì)可變對(duì)象使用 copy 和MutableCopy 都會(huì)拷貝一個(gè)新的對(duì)象出來,即,copy 和 mutableCopy 都是深拷貝;

對(duì)不可變對(duì)象使用 copy, 新拷貝出來的對(duì)象地址和被拷貝對(duì)象地址一致?

對(duì)不可變對(duì)象使用 mutableCopy 新拷貝出來的對(duì)象和被拷貝的對(duì)象內(nèi)存地址發(fā)生變化,?

所以對(duì)不可變對(duì)象 copy 就是淺拷貝,mutableCopy 就是深拷貝.?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睛挚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子急黎,更是在濱河造成了極大的恐慌扎狱,老刑警劉巖侧到,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異淤击,居然都是意外死亡匠抗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門污抬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汞贸,“玉大人,你說我怎么就攤上這事壕吹≈埽” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵耳贬,是天一觀的道長(zhǎng)踏堡。 經(jīng)常有香客問我,道長(zhǎng)咒劲,這世上最難降的妖魔是什么顷蟆? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮腐魂,結(jié)果婚禮上帐偎,老公的妹妹穿的比我還像新娘。我一直安慰自己蛔屹,他們只是感情好削樊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兔毒,像睡著了一般漫贞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上育叁,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天迅脐,我揣著相機(jī)與錄音,去河邊找鬼豪嗽。 笑死谴蔑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的龟梦。 我是一名探鬼主播隐锭,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼计贰!你這毒婦竟也來了成榜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤蹦玫,失蹤者是張志新(化名)和其女友劉穎赎婚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體樱溉,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挣输,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了福贞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撩嚼。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖挖帘,靈堂內(nèi)的尸體忽然破棺而出完丽,到底是詐尸還是另有隱情,我是刑警寧澤拇舀,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布逻族,位于F島的核電站,受9級(jí)特大地震影響骄崩,放射性物質(zhì)發(fā)生泄漏聘鳞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一要拂、第九天 我趴在偏房一處隱蔽的房頂上張望抠璃。 院中可真熱鬧,春花似錦脱惰、人聲如沸搏嗡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽采盒。三九已至,卻和暖如春舅踪,著一層夾襖步出監(jiān)牢的瞬間纽甘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工抽碌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悍赢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓货徙,卻偏偏與公主長(zhǎng)得像左权,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子痴颊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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