NSString 使用copy而不是strong

作者: 云无心 | 来源:发表于2016-01-05 11:29 被阅读341次

为什么NSString使用copy而不是strong, 很多网上都有说深复制浅复制,影子克隆人等说法,这里我讲一下我的理解,直接上代码

属性.png
代码.png

可以看到在一个copy修饰和一个strong修饰的string,在复制给了一个他们的子类(mutableString)之后, 当可变字符串mustr改变之后, 使用strong修饰的随之改变, 而copy修饰的并未发生改变.
也就是说, 使用strong,只是把指针指向了可变字符串mustr, 并且计数器+1 , 所以当可变字符串改变时,本身也随着改变. 而使用copy 则可以复制一个值存起来, 可以防止对象在自己不知道的情况下被改变.

相关文章

网友评论

  • 帅气的昵称6:我什么我跟作者写的一样的代码,结果都是223
    帅气的昵称6: @云无心 谢谢了,我用的下划线访问的变量,没有触发到setter
    云无心:@帅气的昵称6 肯定替换方法错了, 在检查一下
  • 8ae158dda3f2:还是区别在setter
  • terrylmay:这个不是只用在string上面的喔,所有不想有side effect 的逻辑都要用copy来完成,而不是直接引用
    云无心:@terrylmay 受教了! :blush:

本文标题:NSString 使用copy而不是strong

本文链接:https://www.haomeiwen.com/subject/xwhzhttx.html