深拷貝和淺拷貝

淺拷貝

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

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

char* str2 = str;

淺拷貝只是對(duì)對(duì)象的簡(jiǎn)單拷貝昭殉,讓幾個(gè)對(duì)象共用一片內(nèi)存撤防,當(dāng)內(nèi)存銷毀的時(shí)候妖碉,指向這片內(nèi)存的幾個(gè)指針需要重新定義才可以使用,要不然會(huì)成為野指針村砂。

iOS 里面的淺拷貝:

在 iOS 里面, 使用retain 關(guān)鍵字進(jìn)行引用計(jì)數(shù)屹逛,就是一種更加保險(xiǎn)的淺拷貝础废。他既讓幾個(gè)指針共用同一片內(nèi)存空間汛骂,又可以在release 由于計(jì)數(shù)的存在,不會(huì)輕易的銷毀內(nèi)存评腺,達(dá)到更加簡(jiǎn)單使用的目的帘瞭。

深拷貝:

深拷貝是指拷貝對(duì)象的具體內(nèi)容,而內(nèi)存地址是自主分配的蒿讥,拷貝結(jié)束之后蝶念,兩個(gè)對(duì)象雖然存的值是相同的,但是內(nèi)存地址不一樣诈悍,兩個(gè)對(duì)象也互不影響祸轮,互不干涉。

copy 與 retain 的區(qū)別:

copy 是創(chuàng)建一個(gè)新對(duì)象侥钳,retain 是創(chuàng)建一個(gè)指針适袜,引用對(duì)象計(jì)數(shù)加一。 copy屬性標(biāo)識(shí)兩個(gè)對(duì)象內(nèi)容相同舷夺,新的對(duì)象retain count為1, 與舊有對(duì)象引用計(jì)數(shù)無(wú)關(guān)苦酱,舊有對(duì)象沒有變化。copy減少對(duì)象對(duì)上下文的依賴给猾。

iOS里的深拷貝:

iOS提供了copy和mutableCopy方法疫萤,顧名思義,copy就是復(fù)制了一個(gè)imutable的對(duì)象敢伸,而mutableCopy就是復(fù)制了一個(gè)mutable的對(duì)象扯饶。以下將舉幾個(gè)例子來(lái)說明。

這里指的是NSString, NSNumber等等一類的對(duì)象池颈。

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),引用計(jì)數(shù)沒有發(fā)生改變。而stringMCopy則是我們所說的真正意義上的復(fù)制躯砰,系統(tǒng)為其分配了新內(nèi)存每币,是兩個(gè)獨(dú)立的字符串內(nèi)容是一樣的。

拷貝構(gòu)造:

當(dāng)然在 ios 中并不是所有的對(duì)象都支持copy琢歇,mutableCopy兰怠,遵守NSCopying協(xié)議的類可以發(fā)送copy消息,遵守NSMutableCopying協(xié)議的類才可以發(fā)送mutableCopy消息李茫。

假如發(fā)送了一個(gè)沒有遵守上訴兩協(xié)議而發(fā)送copy或者 mutableCopy,那么就會(huì)發(fā)生異常揭保。但是默認(rèn)的ios類并沒有遵守這兩個(gè)協(xié)議。如果想自定義一下copy 那么就必須遵守NSCopying,并且實(shí)現(xiàn) copyWithZone: 方法涌矢,如果想自定義一下mutableCopy 那么就必須遵守NSMutableCopying,并且實(shí)現(xiàn) mutableCopyWithZone: 方法掖举。

如果是我們定義的對(duì)象,那么我們自己要實(shí)現(xiàn)NSCopying , NSMutableCopying這樣就能調(diào)用copy和mutablecopy了。舉個(gè)例子:

@interface MyObj : NSObject{

NSMutableString *_name;

NSString * _imutableStr ;

int _age;

}

@property (nonatomic, retain) NSMutableString *name;

@property (nonatomic, retain) NSString *imutableStr;

@property (nonatomic) int age;

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;

returncopy;

}

mutableCopy拷貝構(gòu)造:

- (id)mutableCopyWithZone:(NSZone *)zone{

MyObj *copy = NSCopyObject(self, 0, zone);

copy->name = [_name mutableCopy];

copy->age = age;

returncopy;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末塔次,一起剝皮案震驚了整個(gè)濱河市方篮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌励负,老刑警劉巖藕溅,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異继榆,居然都是意外死亡败富,警方通過查閱死者的電腦和手機(jī)猾警,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門绵估,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)曼验,“玉大人,你說我怎么就攤上這事翠忠【瞎叮” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵秽之,是天一觀的道長(zhǎng)当娱。 經(jīng)常有香客問我,道長(zhǎng)考榨,這世上最難降的妖魔是什么跨细? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮河质,結(jié)果婚禮上冀惭,老公的妹妹穿的比我還像新娘。我一直安慰自己掀鹅,他們只是感情好云头,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淫半,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匣砖。 梳的紋絲不亂的頭發(fā)上科吭,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音猴鲫,去河邊找鬼对人。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拂共,可吹牛的內(nèi)容都是我干的牺弄。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼宜狐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼势告!你這毒婦竟也來(lái)了蛇捌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咱台,失蹤者是張志新(化名)和其女友劉穎络拌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體回溺,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡春贸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遗遵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萍恕。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖车要,靈堂內(nèi)的尸體忽然破棺而出允粤,到底是詐尸還是另有隱情,我是刑警寧澤屯蹦,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布维哈,位于F島的核電站,受9級(jí)特大地震影響登澜,放射性物質(zhì)發(fā)生泄漏阔挠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一脑蠕、第九天 我趴在偏房一處隱蔽的房頂上張望购撼。 院中可真熱鬧,春花似錦谴仙、人聲如沸迂求。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)揩局。三九已至,卻和暖如春掀虎,著一層夾襖步出監(jiān)牢的瞬間凌盯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工烹玉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驰怎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓二打,卻偏偏與公主長(zhǎng)得像县忌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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