浅拷贝:指针拷贝,复制一个新的指针,只想同一块内存区域。实际内存并没有发生拷贝
深拷贝:内容拷贝,拷贝数据到一块新内存区域,指针指向拷贝的数据区
总结
1. copy出来的字符串一定是不可变字符串,如果传入的是可变字符串,会发生深拷贝为不可变字符串,否则为浅拷贝。
2. mutablecopy,一定是深拷贝,拷贝出来的一定是可变字符串或者数组,即使传入的是不可变字符串或者数组。
思考
-
为什么NSString使用copy修饰也就可以理解了。使用copy修饰之后,即使属性拷贝来自可变字符串,也会被深拷贝成不可变字符串,也就是源字符串修改之后不会影响到属性字符串,增强了代码的健壮性。
-
关于不可变字符串和数组的copy是浅拷贝也很好理解,既然数据源本身是不可变的,也就是具备安全性,那么系统默认浅拷贝其中数据,显然是合理的做法。
作者:安东_Ace
链接:https://www.jianshu.com/p/eda4957735ee
来源:简书