关于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);
可以看出,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);
这里copy、mutableCopy发生的都是深拷贝。
但是如果是这样:
NSMutableString*str3 =@"world";//以常量赋值的方式
NSString*str4 = [str3copy];
NSLog(@"copy:\n str3:%p,str4:%p",str3,str4);
这时发生的就是浅拷贝。