A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

NSMutableString *str1=[NSMutableString stringWithFormat:@"abc"];
NSString * str2=[str1 copy];
[str1 appendString:@"dd"];
  NSLog(@"str1=%@,str2=%@",str1,str2);

copy不应该是一个浅拷贝,只拷贝了地址没有分配新的内存空间吗?那为什么原空间的内容变了,str2却还是没有变,那么str2访问的是哪个空间的内容呢?跪求大神解惑啊啊啊啊啊~~~

2 个回复

正序浏览
只记住一点原则就OK了 :
copy的最终意义是为了改变原本或副本中的其中一个,不会影响到另一个
NSString 是一个不可变的字符串,永远不可能改变,所以用 NSString接收一个NSString的copy 完全没必要弄出一个新副本,只需要返回本身就行了
而其他情况 都应该是深拷贝,因为涉及到了可变字符串NSMutableString  他是可以变得,要想一边的值改变不影响另一边的值,那只能是两块不同的内存区域,所以都是深拷贝.
回复 使用道具 举报
copy+mutable是深拷贝,堆区新建对象了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马