最近在学习IOS的程序,根据IOS5基础教程编码,在第8章的Search时,提到一个深度复制的概念,后来重新学习了下Objective-C中的copy,mutablecopy,以及其他一些方法,先将相关学习经验记录下来。
XCODE 版本是4.6.3 模拟器是IPHONE6.1,在测试时发现与很多书上,以及网上的资料不符合,不知道是不是苹果新的编译器改动的问题。
1.针对非容器类型
如 NSString,NSMutableString
如果对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制
使用mutableCopy复制完后,对象是相互独立;
如下:
NSString *string1=[[NSStringalloc] initWithFormat:@"1111"];
NSString *string2=[string1 copy];
//string2 是string1 的指针复制
NSMutableString *mstring3=[[NSMutableStringalloc] init];
[mstring3 appendString:string1];
// 关于 appendString的使用在后面章节将会介绍,其实这时一个对象复制(深拷贝)
NSMutableString *mstring4=[mstring3 mutableCopy];
//使用mutableCopy后 mstring4拥有了和mstring3一样的内容,但是他们所指向的对象时完全不同的
NSLog(@"string1 %@",string1);
NSLog(@"string2 %@",string2);
NSLog(@"string3 %@",mstring3);
NSLog(@"string4 %@",mstring4);
[mstring3 appendString:@"22222"];
//通过修改mstring3 ,可以发现因为其使用了 appendString,所以他与string1已经是2个不同的对象了
//因为mstring4使用的是mutableCopy,这也是一个深拷贝,所以mstring4也没有收到影响