iOS 深浅拷贝 为什么NSString使用copy

2019-11-27  本文已影响0人  红色海_

理解iOS 深浅拷贝

为什么NSString使用copy

浅拷贝: 指针拷贝,复制一个新的指针,只想同一块内存区域。实际内存并没有发生拷贝.

深拷贝: 内容拷贝,拷贝数据到一块新内存区域,指针指向拷贝的数据区.

iOS中的深浅拷贝,strong,copy,mutableCopy

可变字符串在copy之后会发生深拷贝,拷贝出来的是一个不可变字符串!

  1. copy出来的字符串一定是不可变字符串,如果传入的是可变字符串,会发生深拷贝为不可变字符串,否则为浅拷贝。
  2. mutablecopy,一定是深拷贝,拷贝出来的一定是可变字符串或者数组,即使传入的是不可变字符串或者数组。

思考
为什么NSString使用copy修饰也就可以理解了。
使用copy修饰之后即使属性拷贝来自可变字符串,也会被深拷贝成不可变字符串,
也就是源字符串修改之后不会影响到属性字符串,增强了代码的健壮性。

关于不可变字符串和数组的copy是浅拷贝也很好理解,
既然数据源本身是不可变的,也就是具备安全性,
那么系统默认浅拷贝其中数据,显然是合理的做法。

上一篇 下一篇

猜你喜欢

热点阅读