iOS的深拷貝和淺拷貝

1、了解深拷貝和淺拷貝

iOS 里面的淺拷貝:

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

iOS 里面的深拷貝:

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

2、Objc對象拷貝構(gòu)造:

  • 在OC中要想自定義的類具有拷貝功能(也就是能用copy方法)則類必須遵守NSCopying協(xié)議,并且實現(xiàn)協(xié)議中的(id)copyWithZone:(NSZone *)zone方法;
  • 在這個方法中我們可以根據(jù)自己的實際情況來實現(xiàn),不同的實現(xiàn)方式,copy出來的對象具有不同的效果
    類的深/淺拷貝也就是在這個方法中體現(xiàn),具體如下
  • 同理,NSMutableCopying也是可以按照下面實現(xiàn)。。。

(1)自定義淺拷貝

-(id)copyWithZone:(NSZone *)zone
{
    //創(chuàng)建新的對象空間
    Student *stu = [[self class] allocWithZone:zone];

    //將屬性復(fù)制---其實只是復(fù)制了地址
    stu.name = self.name;
    stu.sex = self.sex;
    stu.age = self.age;

    return stu;
}

(2)自定義深拷貝

-(id)copyWithZone:(NSZone *)zone
{
    //創(chuàng)建新的對象空間
    Student *stu = [[self class] allocWithZone:zone];

    //為每個屬性創(chuàng)建新的空間,并將內(nèi)容復(fù)制
    stu.name = [[NSString alloc] initWithString:self.name];
    stu.sex = [[NSString alloc] initWithString:self.sex];
    stu.age = self.age;

    return stu;
}

3、NSString的Copy和MutableCopy

//Copy
NSString *str = @"嘹亮的小浩子";
NSString *str1 = [str copy];
    
NSLog(@"str地址%p ---- str1地址%p",str,str1);
//輸出,得出的結(jié)果,對NSString進(jìn)行copy只是指針拷貝
2016-07-18 22:32:06.833 深拷貝和淺拷貝[12603:1256836] str0x1090ea068 ---- str10x1090ea068

//MutableCopy
NSString *str = @"嘹亮的小浩子";
NSString *str1 = [str mutableCopy];

NSLog(@"str地址%p ---- str1地址%p",str,str1);
//輸出,得出的結(jié)果,對NSString進(jìn)行MutableCopy進(jìn)行內(nèi)容拷貝,生成新的對象

** 以下總結(jié)**

別人總結(jié)的,拿來借鑒以下

未完待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 導(dǎo)讀 最近經(jīng)常在關(guān)注的公眾號或者技術(shù)網(wǎng)站看到關(guān)于 iOS 深拷貝與淺拷貝的話題??吹揭黄夹g(shù)文章,點(diǎn)擊收藏或者只是...
    獨(dú)木舟的木閱讀 733評論 0 8
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,624評論 30 472
  • 深拷貝和淺拷貝這個問題在面試中常常被問到,而在實際開發(fā)中,只要稍有不慎,就會在這里出現(xiàn)問題。尤其對于初學(xué)者來說,我...
    西門淋雨閱讀 1,926評論 0 1
  • 百米飛人大戰(zhàn) 文:recycler “各位電視機(jī)前的觀眾,各位收音機(jī)前的聽眾,海外僑胞們。你也許剛打開電視機(jī),現(xiàn)在...
    Recycler閱讀 386評論 0 0
  • 寢室。 郭旭這兩天很開心,整個人都充滿了活力,像盛開的向日葵一般張著一張笑臉,見到誰都笑嘻嘻的,弄得大家都對他的花...
    萬我靜閱讀 556評論 0 1

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