深復(fù)制 與淺復(fù)制

Copy & MutableCopy

使用copy或mutableCopy方法可以創(chuàng)建一個對象的副本

copy

需要實現(xiàn)NSCoppying協(xié)議

這些創(chuàng)建的是不可變副本(如NSString肴盏、NSArray、NSDictionary)

mutableCopy

需要先實現(xiàn)NSMutableCopying協(xié)議

創(chuàng)建的是可變副本(如NSMutableString究抓、NSMutableArray昂利、NSMutableDictionary)

Copy的目的是建立副本登刺,同時修改原始對象和復(fù)本不會互相干擾

深復(fù)制 & 淺復(fù)制
深復(fù)制:

內(nèi)容拷貝手负,源對象和副本指向的是不同的兩個對象;

深拷貝是指拷貝對象的具體內(nèi)容篡诽,而內(nèi)存地址是自主分配的冗茸,拷貝結(jié)束之后席镀,兩個對象雖然存的值是相同的,但是內(nèi)存地址不一樣夏漱,兩個對象也互不影響豪诲,互不干涉。

copy 與 retain 的區(qū)別:

copy 是創(chuàng)建一個新對象挂绰,retain 是創(chuàng)建一個指針跛溉,引用對象計數(shù)加一。 copy屬性標(biāo)識兩個對象內(nèi)容相同扮授,新的對象retain count為1, 與舊有對象引用計數(shù)無關(guān)芳室,舊有對象沒有變化。copy減少對象對上下文的依賴刹勃。

源對象引用計數(shù)器不變堪侯,副本計數(shù)器設(shè)置為1

iOS提供了copy和mutableCopy方法,顧名思義荔仁,copy就是復(fù)制了一個imutable的對象伍宦,而mutableCopy就是復(fù)制了一個mutable的對象。

淺復(fù)制:

指針拷貝乏梁,源對象和副本指向的是同一個對象

對象的引用計數(shù)器+1次洼,其實相當(dāng)于做了一次retain操作

在 iOS 里面, 使用retain 關(guān)鍵字進行引用計數(shù)遇骑,就是一種更加保險的淺拷貝卖毁。他既讓幾個指針共用同一片內(nèi)存空間,又可以在release 由于計數(shù)的存在落萎,不會輕易的銷毀內(nèi)存亥啦,達到更加簡單使用的目的。

淺拷貝就是對內(nèi)存地址的復(fù)制练链,讓目標(biāo)對象指針和源對象指向同一片內(nèi)存空間翔脱。如:

char* str = (char*)malloc(100);
char* str2 = str;

淺拷貝只是對對象的簡單拷貝,讓幾個對象共用一片內(nèi)存媒鼓,當(dāng)內(nèi)存銷毀的時候届吁,指向這片內(nèi)存的幾個指針需要重新定義才可以使用错妖,要不然會成為野指針。

只有不可變對象創(chuàng)建不可變副本(copy)才是淺復(fù)制疚沐,其他都是深復(fù)制
 NSString *string = @”dddd";
NSString *stringCopy = [string copy];
NSMutableString *stringDCopy = [string mutableCopy];
[stringMCopy appendString:@"!!"];

查看內(nèi)存可以發(fā)現(xiàn)站玄,string和stringCopy指向的是同一塊內(nèi)存區(qū)域(weak reference),引用計數(shù)沒有發(fā)生改變。而stringMCopy則是我們所說的真正意義上的復(fù)制濒旦,系統(tǒng)為其分配了新內(nèi)存,是兩個獨立的字符串內(nèi)容是一樣的再登。

copy拷貝構(gòu)造:

- (id)copyWithZone:(NSZone *)zone{
    MyObj *copy = [[[self class] allocWithZone :zone] init];
    copy->name = [_name copy];
    copy->imutableStr = [_imutableStr copy];
    copy->age = age;
    return copy;
}

mutableCopy拷貝構(gòu)造:

- (id)mutableCopyWithZone:(NSZone *)zone{
    MyObj *copy = NSCopyObject(self, 0, zone);
    copy->name = [_name mutableCopy];
    copy->age = age;
    return copy;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尔邓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锉矢,更是在濱河造成了極大的恐慌梯嗽,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沽损,死亡現(xiàn)場離奇詭異灯节,居然都是意外死亡,警方通過查閱死者的電腦和手機绵估,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門炎疆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人国裳,你說我怎么就攤上這事形入。” “怎么了缝左?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵亿遂,是天一觀的道長。 經(jīng)常有香客問我渺杉,道長蛇数,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任是越,我火速辦了婚禮耳舅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘倚评。我一直安慰自己挽放,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布蔓纠。 她就那樣靜靜地躺著辑畦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腿倚。 梳的紋絲不亂的頭發(fā)上纯出,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音,去河邊找鬼暂筝。 笑死箩言,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的焕襟。 我是一名探鬼主播陨收,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸵赖!你這毒婦竟也來了务漩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤它褪,失蹤者是張志新(化名)和其女友劉穎饵骨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茫打,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡居触,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了老赤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轮洋。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抬旺,靈堂內(nèi)的尸體忽然破棺而出砖瞧,到底是詐尸還是另有隱情,我是刑警寧澤嚷狞,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布块促,位于F島的核電站,受9級特大地震影響床未,放射性物質(zhì)發(fā)生泄漏竭翠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一薇搁、第九天 我趴在偏房一處隱蔽的房頂上張望斋扰。 院中可真熱鬧,春花似錦啃洋、人聲如沸传货。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽问裕。三九已至,卻和暖如春孵坚,著一層夾襖步出監(jiān)牢的瞬間粮宛,已是汗流浹背窥淆。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巍杈,地道東北人忧饭。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像筷畦,于是被迫代替她去往敵國和親词裤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

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

  • iOS 集合的深復(fù)制與淺復(fù)制 概念 對象拷貝有兩種方式:淺復(fù)制和深復(fù)制鳖宾。顧名思義吼砂,淺復(fù)制,并不拷貝對象本身攘滩,僅僅是...
    難卻卻閱讀 321評論 0 1
  • 概念對象拷貝有兩種方式:淺復(fù)制和深復(fù)制。顧名思義纸泡,淺復(fù)制漂问,并不拷貝對象本身,僅僅是拷貝指向?qū)ο蟮闹羔樑遥簧顝?fù)制是直接...
    無盡思緒閱讀 382評論 0 0
  • 概念 對象拷貝有兩種方式:淺復(fù)制和深復(fù)制蚤假。顧名思義,淺復(fù)制吧兔,并不拷貝對象本身磷仰,僅僅是拷貝指向?qū)ο蟮闹羔槪簧顝?fù)制是直...
    liudhkk閱讀 241評論 0 1
  • 概念 對象拷貝有兩種方式:淺復(fù)制和深復(fù)制境蔼。顧名思義灶平,淺復(fù)制,并不拷貝對象本身箍土,僅僅是拷貝指向?qū)ο蟮闹羔樂晗恚簧顝?fù)制是直...
    張霸天閱讀 253評論 0 0
  • 2016年12月4日,星期日 The only conquests which are permanent and...
    奈奈安閱讀 250評論 0 0