iOS技术点iOS 细节大集合iOS 面试题

iOS - Copy 与 MutableCopy

2015-08-04  本文已影响5087人  Mitchell

参考链接


一、深拷贝和浅拷贝####


二、对于非集合对象 Copy 与 mutableCopy 的实践#####
NSString*str = @"aaa";
NSString*copyStr = [str copy];
NSLog(@"str = %p copyStr= %p",str,copyStr);
NSLog(@"指针地址:str = %p copyStr= %p",&str,&copyStr);

输出结果:str = 0x104d94068 copyStr= 0x104d94068
指针地址:str = 0x7fff529e9aa8 copyStr= 0x7fff529e9aa0
小结:对不可变的字符串的copy,我们对象的内存地址没有改变,只是指针的地址改变了,所以在这里我们默认进行了一次浅拷贝,只拷贝了指针。

- 方案二:`copy可变的字符串`
NSMutableString*str1 = [NSMutableString stringWithFormat:@"bbb"];
NSString*copyStr1 = [str1 copy];
NSLog(@"str1 = %p copyStr1 = %p",str1,copyStr1);
NSLog(@"str1 = %p copyStr1= %p",&str1,&copyStr1);

输出结果:str1 = 0x7fa522712cd0 copyStr1 = 0x7fa522717ba0
指针地址:str1 = 0x7fff529e9a98 copyStr1= 0x7fff529e9a90
小结:对可变字符串的copy,我们默认进行了一次深拷贝,直接拷贝了对象。
- 方案三:mutableCopy不可变字符串的

NSString*str2 = @"ccc";
NSMutableString *copyStr2 = [str2 mutableCopy];
NSLog(@"str2 = %p copyStr2 = %p",str2,copyStr2);

输出结果:str2 = 0x10d216108 copyStr2 = 0x7fa522726290
小结:对于不可变字符串的mutableCopy我们默认进行了深拷贝。
- 方案四:mutableCopy可变字符串

NSMutableString*str3 = [NSMutableString stringWithFormat:@"ddd"];
NSMutableString*copyStr3 = [str3 mutableCopy];
NSLog(@"str3 = %p copyStr3 = %p",str3,copyStr3);

输出结果:str3 = 0x7fa5227153c0 copyStr3 = 0x7fa5227263f0
小结:对于可变字符串的mutableCopy我们默认进行了深拷贝。


三、对于集合对象采用 Copy 和 MutableCopy 的实践

NSArray * arr = @[@"1",@"2",@"3"];
NSMutableArray * mutableArr = [arr mutableCopy];
NSArray * copyArr = [arr copy];
NSMutableArray * newArr = [NSMutableArray arrayWithObjects:@"3",@"2",@"1", nil];
NSArray * newCopyArr = [newArr copy];
NSMutableArray * newMutableCopyArr = [newArr mutableCopy];
//测试 arr 的 copy 和 mutableCopy
NSString * str = [arr firstObject];
NSString * copyStr = [copyArr firstObject];
NSString * mutableStr = [mutableArr firstObject];
//测试 mutableArr 的 copy 和 mutableCopy
NSString * str = [newArr firstObject];
NSString * newCopyStr = [newCopyArr firstObject];
NSString * newMutableCopyStr = [newMutableCopyArr firstObject];
图3-1.png
图 3-2.png
图3-3.png

四、结论####


上一篇下一篇

猜你喜欢

热点阅读