iOS关于NSString用string和copy
2019-05-09 本文已影响0人
马维启
我们从这得出了结论:
copy并不一定是浅拷贝,copy出来的一定是不可变字符串或者数组,如果被拷贝的对象是可变数组或者字符串,这时候会发生深拷贝,反之则是浅拷贝。
MutableCopy
这里就不贴验证了,直接上结果,对于字符串和数组MutableCopy一定是深拷贝,而且拷贝出来对象一定是可变字符串或者数组。即使被拷贝对象是不可变字符串。
总结
- copy出来的字符串一定是不可变字符串,如果传入的是可变字符串,会发生深拷贝为不可变字符串,否则为浅拷贝。
- mutablecopy,一定是深拷贝,拷贝出来的一定是可变字符串或者数组,即使传入的是不可变字符串或者数组。
思考
为什么NSString使用copy修饰也就可以理解了。使用copy修饰之后,即使属性拷贝来自可变字符串,也会被深拷贝成不可变字符串,也就是源字符串修改之后不会影响到属性字符串,增强了代码的健壮性。
关于不可变字符串和数组的copy是浅拷贝也很好理解,既然数据源本身是不可变的,也就是具备安全性,那么系统默认浅拷贝其中数据,显然是合理的做法。
WX20190509-173901@2x.png