日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

[Objective-C] Copy 和 MutableCopy

發(fā)布時(shí)間:2025/7/25 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Objective-C] Copy 和 MutableCopy 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

看了幾篇文章,因?yàn)槲恼潞苄率窒?#xff0c;所以內(nèi)容很繁瑣。故整理一下重點(diǎn),寫了測(cè)試程序去了解幾個(gè)知識(shí)點(diǎn),不討論基本概念。新博客wossoneri.com傳送門

非集合類對(duì)象的copy與mutableCopy

//NSString & NSMutableStringNSString *strA = @"origin";NSLog(@"strA pointer: %p content: %@", strA, strA);NSString *strACopy = [strA copy];NSLog(@"strCopy pointer: %p content: %@", strACopy, strACopy);NSMutableString *strAMCopy = [strA mutableCopy];NSLog(@"strMCopy pointer: %p content: %@", strAMCopy, strAMCopy);NSMutableString *strB = [NSMutableString stringWithString:@"mutable string"];NSLog(@"strB pointer: %p content: %@", strB, strB);NSMutableString *strBCopy = [strB copy];NSLog(@"strBCopy pointer: %p content: %@", strBCopy, strBCopy);NSMutableString *strBMCopy = [strB mutableCopy];NSLog(@"strBMCopy pointer: %p content: %@", strBMCopy, strBMCopy);//輸出 strA pointer: 0x100003180 content: origin strCopy pointer: 0x100003180 content: origin strMCopy pointer: 0x100102e90 content: origin strB pointer: 0x100700510 content: mutable string strBCopy pointer: 0x100700570 content: mutable string strBMCopy pointer: 0x1006002c0 content: mutable string

在非集合類對(duì)象中:對(duì)immutable對(duì)象進(jìn)行copy操作,是指針復(fù)制,mutableCopy操作時(shí)內(nèi)容復(fù)制;對(duì)mutable對(duì)象進(jìn)行copy和mutableCopy都是內(nèi)容復(fù)制。

結(jié)論

  • [immutableObject copy] // 淺復(fù)制
  • [immutableObject mutableCopy] //深復(fù)制
  • [mutableObject copy] //深復(fù)制
  • [mutableObject mutableCopy] //深復(fù)制

集合類對(duì)象的copy與mutableCopy

NSArray *arrayA = @[@[@"A", @"B"], @[@"C", @"D"]];NSLog(@"arrayA pointer:%p contentA:%p contentB:%p", arrayA, arrayA[0], arrayA[1]);NSArray *arrCopyA = [arrayA copy];NSLog(@"arrCopyA pointer:%p contentA:%p contentB:%p", arrCopyA, arrCopyA[0], arrCopyA[1]);NSMutableArray *arrMCopyA = [arrayA mutableCopy];NSLog(@"arrMCopyA pointer:%p contentA:%p contentB:%p", arrMCopyA,arrMCopyA[0], arrMCopyA[1]);NSMutableArray *arrayB = [NSMutableArray arrayWithObjects:@[@"A", @"B"], @[@"C", @"D"], nil];NSLog(@"arrayB pointer:%p contentA:%p contentB:%p", arrayB, arrayB[0], arrayB[1]);NSArray *arrCopyB = [arrayB copy];NSLog(@"arrCopyB pointer:%p contentA:%p contentB:%p", arrCopyB, arrCopyB[0], arrCopyB[1]);NSMutableArray *arrMCopyB = [arrayB mutableCopy];NSLog(@"arrMCopyB pointer:%p contentA:%p contentB:%p", arrMCopyB,arrMCopyB[0], arrMCopyB[1]);//輸出 arrayA pointer:0x100700860 contentA:0x100700840 contentB:0x1007007c0 arrCopyA pointer:0x100700860 contentA:0x100700840 contentB:0x1007007c0 arrMCopyA pointer:0x100700990 contentA:0x100700840 contentB:0x1007007c0arrayB pointer:0x100701970 contentA:0x100700880 contentB:0x100701730 arrCopyB pointer:0x100102080 contentA:0x100700880 contentB:0x100701730 arrMCopyB pointer:0x100701ab0 contentA:0x100700880 contentB:0x100701730

可以看到拷貝過程和非集合類大體相同。注意一點(diǎn),就是拷貝過程只是針對(duì)對(duì)象本身,而對(duì)象內(nèi)部的元素還是指針復(fù)制,從上面打印的輸出就可以看出來。

示例

看如下代碼,有一個(gè)mutable數(shù)組,賦值給immutable數(shù)組

@property (nonatomic, strong) NSArray *array;NSMutableArray *mArray = [NSMutableArray array];[mArray addObject:@"AA"];_array = mArray;NSLog(@"mArray: %p, _array: %p", mArray, _array);[mArray addObject:@"BB"];NSLog(@"mArray = %@, _array = %@", mArray, _array);

其中,直接對(duì)array屬性賦值,這樣,_array和mArray便是指向同一對(duì)象的指針,因?yàn)镹SMutableArray是NSArray的子類,故_array能夠接受mArray的值。

輸出結(jié)果:

mArray: 0x126ec3e00, _array: 0x126ec3e00 mArray = (AA,BB ), _array = (AA,BB )

下面做個(gè)修改,把

_array = mArray;

改為

_array = [mArray copy];

想想結(jié)果如何?

mArray是mutable對(duì)象,拷貝屬于(不完全)深拷貝,所以可以想到_array的指針和mArray并不相同,所以后面mArray改變內(nèi)容也與_array無關(guān)。

輸出:

mArray: 0x154dc8070, _array: 0x154dcf4e0 mArray = (AA,BB ), _array = (AA )

小結(jié)

Reference
小結(jié) iOS 中的 copy
iOS 集合的深復(fù)制與淺復(fù)制

轉(zhuǎn)載于:https://www.cnblogs.com/rossoneri/p/5559882.html

總結(jié)

以上是生活随笔為你收集整理的[Objective-C] Copy 和 MutableCopy的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。