看过一些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,以免因可变字符串的修改导致的一些非预期问题。
网友评论