copy multablecopy

  • (void)testCopy
    {
    NSArray * array = @[@"1",@"2",@"3"];
    NSArray * arr2 = [array copy];
    NSMutableArray * mul = [array mutableCopy];
    NSString * oriFirst = [array firstObject];
    NSString * mulFirst = [mul firstObject];
    NSLog(@"%@\n%@",array.firstObject,mul.firstObject);

    /**
    Printing description of array:
    <__NSArrayI 0x618000241c80>(
    1,
    2,
    3
    )
    Printing description of arr2:
    <__NSArrayI 0x618000241c80>(
    1,
    2,
    3
    )

 Printing description of mul:
 <__NSArrayM 0x618000242ca0>(
 1,
 2,
 3
 )
 
 可以見(jiàn)到,對(duì)于不可變的 arr 如果進(jìn)行 copy 的話會(huì)進(jìn)行淺拷貝,如果 mutableCopy 會(huì)進(jìn)行內(nèi)容拷貝。但是,通過(guò)圖 3-2 打印出的地址信息,這里的內(nèi)容拷貝僅僅是拷貝 array 這個(gè)對(duì)象,array 集合內(nèi)的元素仍然是指針拷貝。所以可以定義為是單層深拷貝。
 */




NSMutableArray * newMul = [NSMutableArray array];
[newMul addObject:@"new1"];
[newMul addObject:@"new2"];
NSArray * copyMul = [newMul copy];
NSMutableArray * copyMul2 = [newMul mutableCopy];

NSString * oriFirst_ = [newMul firstObject];
NSString * mulFirst_ = [copyMul2 firstObject];


/**
 (__NSCFConstantString *) $1 = 0x000000010f1daf10 @"1"
 Printing description of newMul:
 <__NSArrayM 0x60000004bee0>(
 new1,
 new2
 )
 Printing description of copyMul:
 <__NSArrayI 0x60000003ec00>(
 new1,
 new2
 )
 
 
 Printing description of copyMul2:
 <__NSArrayM 0x60000004fab0>(
 new1,
 new2
 )
 
 
 對(duì)于可變的集合元素的 copy 與 mutableCopy 都是單層深復(fù)制。
 */
NSLog(@"hello");

/**
 
 對(duì)于非集合對(duì)象
 copy:因?yàn)閏opy默認(rèn)返回的是不可變的,所以當(dāng)我們對(duì)一個(gè)不可變的字符串進(jìn)行copy的時(shí)候,我們只是拷貝了它的指針(淺拷貝)。當(dāng)我們對(duì)一個(gè)可變的字符串進(jìn)行拷貝的時(shí)候,因?yàn)轭愋娃D(zhuǎn)變了,我們需對(duì)其進(jìn)行深拷貝。
 mutableCopy:默認(rèn)返回的是一個(gè)可變的對(duì)象,適用于可變的對(duì)象,例如NSMutableString,NSMutableArray,NSMutableDictionary、etc。  無(wú)論對(duì)于可變的字符串還是不可變的字符串進(jìn)行mutableCopy,系統(tǒng)都默認(rèn)進(jìn)行深拷貝,那么為什么對(duì)于相同類型的進(jìn)行mutableCopy返回的仍然是新的對(duì)象呢,因?yàn)樵谶@里系統(tǒng)要保證,舊的對(duì)象和新的對(duì)象都是可變的,切他們之前不會(huì)相互影響。
 
 對(duì)于集合對(duì)象
 對(duì)于不可變的集合對(duì)象,copy 是淺拷貝,mutableCopy 是單層深拷貝。
 對(duì)于可變的集合對(duì)象,無(wú)論 copy 或者 mutableCopy 都是單層深拷貝。
 

 */

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 本文為轉(zhuǎn)載: 作者:zyydeveloper 鏈接:http://www.lxweimin.com/p/5f776a...
    Buddha_like閱讀 904評(píng)論 0 2
  • Copy & MutableCopy 前言 好久都沒(méi)寫東西了,除了平常的工作、學(xué)習(xí),過(guò)年的喜慶與忙碌....都是借...
    Chrisss閱讀 1,029評(píng)論 4 2
  • 弓剪長(zhǎng)陽(yáng)云分道,槍舞平湖月雕龍 騶卒忍別備鞍馬,寒甲勇毅踏晨星
    柒淺牧言閱讀 221評(píng)論 0 0