NSString *srcStr = @"lxc";
/*
只要通过拷贝出来的对象,拷贝出来的对象中内容和以前对象中的内容一致
"一般"情况下拷贝回生成一个新的对象
为什么会产生一个新的对象:
1.修改源对象不能影响到副本对象
修改副本对象不能影响到源对象
*/
NSMutableString * copyStr = [srcStr mutableCopy];
NSLog(@"srcStr = %p copyStr = %p",srcStr,copyStr);
NSLog(@"srcStr = %@ copyStr = %@",srcStr,copyStr);
如果通过不可变对象调用了copy方法,那么不会生成一个新的对象
原因:源对象是不能修改的,拷贝出来的对象也是不能修改的
既然两个都不能修改,所以永远不能影响到另外一个对象
NSString *srcStr = @"lxc";
NSString *copyStr = [srcStr copy];
NSLog(@"srcStr = %p copyStr = %p",srcStr,copyStr);
NSLog(@"srcStr = %@ copyStr = %@",srcStr,copyStr);
正是因为调用copy方法有时候会生成一个新的对象,有时候不会生成一个新的对象
所以:如果没有生成新的对象,我们称之为浅拷贝,本质是指针拷贝
如果生成了新的对象,我们称之为深拷贝,本质是生成一个新的对象
网友评论