NSString 使用 copy 关键字和 strong 关键字修饰的异同

NSString 为什么要用 copy 关键字,如果用 strong 会有什么问题?当然,这里没有说用 strong 就一定不行,使用 copy 和 strong 是看情况而定的。网上也有很多文章是解释这一点的,但都不够形象清晰,博主的博客风格是力求简单易懂,尽量用实例来说明问题。

不说太多废话,用最简单的例子来说明问题,直接上代码和运行截图:
NSString 使用 copy 关键字和 strong 关键字修饰的异同

通过上面的例子可以看出,当使用 strong 修饰 NSString 时,我们在没有直接修改 self.name 的情况下 self.name 却被修改了,就好像一个人的名字没有经过同意就被修改了,我们的初衷只是单纯地修改 str1,但是 self.name 却被意外修改了,而这就是使用 strong 所不想看到的结果,会破坏程序的封装性。

说明:使用 strong 后 self.name 和 str1 指向的是同一片内存区域,所以修改其中一个值后两个值就都变了。

而当使用 copy 修饰 NSString 时,str2 通过 copy 得到了一个新的对象赋值给 self.name,这样我们再修改 str2 的值就跟 self.name 没关系了,只有直接对 self.name 进行赋值才能改变它的值,这样也就保证了程序的封装性。

本文只是对NSString 使用 copy 关键字和 strong 关键字修饰的异同做一个简单的总结和分享,更深入了解还需学习浅拷贝与深拷贝相关知识,后续博文会陆续更新!这里先用一句话简单比喻一下:
浅复制好比你和你的影子,你完蛋,你的影子也完蛋;深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。