淺拷貝與深拷貝

在ios中并非所有的對(duì)象都支持copy和mutableCopy,只有遵守NSCopying協(xié)議的對(duì)象才能發(fā)送copy消息,同理遵守NSMutableCopying協(xié)議的類才能發(fā)發(fā)送mutableCopy消息。并實(shí)現(xiàn)它們各自的copyWithZone和mutableCopyWithZone方法。

淺拷貝copy:

淺拷貝產(chǎn)生的新對(duì)象和源對(duì)象共享同一個(gè)內(nèi)存空間,也就是所謂的指針復(fù)制,當(dāng)內(nèi)存銷毀的時(shí)候,指向這片內(nèi)存的指針需要重新定義才能使用,否則會(huì)成為野指針。

-(void)shallowCopy{
    NSArray *someArr = [NSArray arrayWithObjects:@"Elena",@"Jane",@"Tome" ,nil];
    NSArray *shallowCopyArr = [someArr copyWithZone:nil];
    NSLog(@"\nsomeArr = %p,\nshallowCopyArr = %p",someArr,shallowCopyArr);
    
    NSDictionary *someDic = [NSDictionary dictionaryWithObjectsAndKeys:@"item1",@"Elena",@"item2",@"Tome", nil];
    NSDictionary *shallowCopyDic = [[NSDictionary alloc] initWithDictionary:someDic copyItems:NO];
    NSLog(@"\nsomeDic = %p,\nshallowCopyDic = %p",someDic,shallowCopyDic);
}

打印結(jié)果:


a-2.png

深拷貝mutableCopy:

深拷貝產(chǎn)生的對(duì)象其內(nèi)存空間是自主分配的,雖然新對(duì)象的值與源對(duì)象相同但是內(nèi)存地址不一樣(對(duì)象復(fù)制),因此兩者互不影響,互不干涉。


a-1.png

自定義對(duì)象的復(fù)制

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

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

  • 1.淺拷貝和深拷貝的區(qū)別 淺拷貝只是復(fù)制對(duì)象本身,對(duì)象屬性包含的對(duì)象不復(fù)制,不產(chǎn)生新對(duì)象,直接指向原有對(duì)象。 深拷...
    靜水流深_0321閱讀 1,104評(píng)論 0 3
  • 一 、基本概念 1.1 深拷貝 與 淺拷貝 對(duì)象拷貝有兩種方式:淺復(fù)制和深復(fù)制。顧名思義,淺復(fù)制,并不拷貝對(duì)象本身...
    leonardni閱讀 285評(píng)論 0 0
  • 一、深拷貝和淺拷貝 1.淺拷貝:也可以叫影子拷貝或者指針拷貝,淺拷貝就是對(duì)內(nèi)存地址的復(fù)制,會(huì)生成一個(gè)新的指針指向這...
    4fbc4e24081a閱讀 1,198評(píng)論 5 4
  • 1、對(duì)象拷貝有兩種方式:淺復(fù)制和深復(fù)制。顧名思義,淺復(fù)制,并不拷貝對(duì)象本身,僅僅是拷貝指向?qū)ο蟮闹羔槪簧顝?fù)制是直接...
    滴答大閱讀 848評(píng)論 0 2
  • 本文為轉(zhuǎn)載: 作者:zyydeveloper 鏈接:http://www.itdecent.cn/p/5f776a...
    Buddha_like閱讀 1,017評(píng)論 0 2

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