为什么NSString大多数情况下建议用copy修饰

看过一些NSString建议用copy和strong修饰的文章,很多时候的解释都是讲深拷贝,浅拷贝的问题,然后就是如下结论:一般我们将对象声明为NSString时,都不希望它改变,所以大多数情况下,我们建议用copy,以免因可变字符串的修改导致的一些非预期问题。一直没有特别理解是怎么回事,闲来无事自己动手写了一个demo来模拟一些需求来验证上述内容。


屏幕快照 2018-01-31 下午5.40.53.png

先创建一个Person类,分别用Copy和String修饰两个属性。


屏幕快照 2018-01-31 下午5.44.49.png

分别赋值和打印地址如下结果
屏幕快照 2018-01-31 下午5.44.59.png

我们发现secondName并没有copy出新对象,跟用strong修饰没有任务区别,都是所谓的浅拷贝,然后我又试了个用可变字符串去赋值,中途又修改的可变字符串。


屏幕快照 2018-01-31 下午5.41.35.png

打印结果如下:
屏幕快照 2018-01-31 下午5.41.44.png

效果就出来了。用copy修饰的属性copy了一个新的对象,而strong没有,结果也显而易见,也应证了结论:一般我们将对象声明为NSString时,都不希望它改变,所以大多数情况下,我们建议用copy,以免因可变字符串的修改导致的一些非预期问题。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容