字符串的浅拷贝和深拷贝
我们都知道@property修饰字符串时采用关键字copy,那是什么原因的,面试时常问的浅拷贝和深拷贝是什么呢?
- 我们先看一段代码,NSString对象调用copy方法控制台输出的name和str1地址是一样的,说明NSString没有创建新的对象,这种叫做浅拷贝,str2的地址和name的地址不同,通过断点我们知道str2指针其实是NSMutableString类型,调用mutableCopy方法创建了新的对象,返回NSMutableString类型的对象,叫做深拷贝。
NSString *name = @"Billy";
//copy方法浅拷贝
NSString *str1 = [name copy];
//mutableCopy方法深拷贝
NSMutableString *str2 = [name mutableCopy];
NSLog(@"###%p###%p###%p",name,str1,str2);
- 我们在来看NSMutableString类型字符串,NSMutableString对象调用copy方法,是深拷贝,创建一个新的对象,返回的是NSString类型,调用mutableCopy,是深拷贝,创建新的对象,返回NSMutableString类型。
NSMutableString *name = [NSMutableString stringWithString