iOS 关于浅拷贝/深拷贝

关于iOS里面的copy/mutableCopy一直不是很清楚,今天看了标哥的文章,动手试验了一下,但是结果好像并不像标哥文章里写的那样,参考文章:http://www.huangyibiao.com/ios-shadowcopy-deepcopy/

一般来讲,copy 是指浅拷贝,只是复制指针内容,对象 并没有拷贝,而mutableCopy是深拷贝,是指重新开辟内存,拷贝对象。我分几个点进行试验:

1.不可变对象 copy

2.不可变对象 mutableCopy

3.可变对象 copy

4.可变对象 mutableCopy

在iOS里面主要有NSString/NSMutableString、NSArray/NSMutableArray、NSDictionary/NSMutableDictionary,就拿NSString来举例:

NSString:

NSString*str1 =@"hello";

NSMutableString*str2 = [str1mutableCopy];

NSLog(@"mutablecopy:\n str1:%p,str2:%p",str1,str2);

str2 = [str1copy];

NSLog(@"copy:\n str1:%p,str2:%p",str1,str2);

结果如下:

iOS 关于浅拷贝/深拷贝_第1张图片

可以看出,copy是浅拷贝,mutableCopy是深拷贝。

NSMutableString:

NSMutableString*str3 =[[NSMutableStringalloc]initWithString:@"world"];

NSString*str4 = [str3copy];

NSLog(@"copy:\n str3:%p,str4:%p",str3,str4);

NSMutableString*str5 = [str3mutableCopy];

NSLog(@"mutablecopy:\n str3:%p,str5:%p",str3,str5);

结果如下:

iOS 关于浅拷贝/深拷贝_第2张图片

这里copy、mutableCopy发生的都是深拷贝。

但是如果是这样:

NSMutableString*str3 =@"world";//以常量赋值的方式

NSString*str4 = [str3copy];

NSLog(@"copy:\n str3:%p,str4:%p",str3,str4);

结果如下:

这时发生的就是浅拷贝。


你可能感兴趣的:(iOS 关于浅拷贝/深拷贝)