iOS 深浅拷贝 为什么NSString使用copy
2019-11-27 本文已影响0人
红色海_
理解iOS 深浅拷贝
为什么NSString使用copy
浅拷贝: 指针拷贝,复制一个新的指针,只想同一块内存区域。实际内存并没有发生拷贝.
深拷贝: 内容拷贝,拷贝数据到一块新内存区域,指针指向拷贝的数据区.
iOS中的深浅拷贝,strong,copy,mutableCopy
可变字符串在copy之后会发生深拷贝,拷贝出来的是一个不可变字符串!
- copy出来的字符串一定是不可变字符串,如果传入的是可变字符串,会发生深拷贝为不可变字符串,否则为浅拷贝。
- mutablecopy,一定是深拷贝,拷贝出来的一定是可变字符串或者数组,即使传入的是不可变字符串或者数组。
思考
为什么NSString使用copy修饰也就可以理解了。
使用copy修饰之后即使属性拷贝来自可变字符串,也会被深拷贝成不可变字符串,
也就是源字符串修改之后不会影响到属性字符串,增强了代码的健壮性。
关于不可变字符串和数组的copy是浅拷贝也很好理解,
既然数据源本身是不可变的,也就是具备安全性,
那么系统默认浅拷贝其中数据,显然是合理的做法。