copy还是strong?用copy还是mutablecopy

有的人说修饰字符串啥的用copy?但是公司代码都是strong,也没见出什么问题。
所以自己下来研究个究竟。

1、什么时候用copy?什么时候用strong?

本质上来讲,copy和strong都没有错,分时候。

  • 父类指针可以指向子类对象(NSMutableString是NSString的子类),使用copy的目的是为了对象有更好的封装性,不受外部影响。无论外部传入可变或不可变对象,本身持有一个不可变的副本。

  • 使用strong,属性可能指向可变对象,如果这个对象被外部更改,则该属性也会受到影响。

不可变:使用copy和strong都没有关系。使用strong较好,因为比copy少了一个判断,节约了内存。要是为了安全考虑,都用cpoy。
可变:如果外部值修改之后,使用strong的话,内部值会跟着改变。而使用copy的时候,会进行深拷贝,不会受到外部影响。

你只需要记住现今手机内存都很大,出于安全的考虑,无论可变还是不可变,个人觉得使用copy比较好!

注意:其他对象NSArray、NSMutableArray 、NSDictionary、NSMutableDictionary一样适用

2、用copy还是mutableCopy?

浅拷贝:

  • 得到的是不可变对象,不管以前的是可变还是不可变。
  • 可以理解为指针的复制,只是多了一个指向这块内存的指针,共用一块内存。

深拷贝:

  • 得到的是可变对象,不管以前的是可变还是不可变
  • 理解为内存的复制,两块内存是完全不同的,也就是两个对象指针分别指向不同的内存,互不干涉。
image.png

结论:

你想得到一个可变的,就使用mutableCopy。仅仅想获取到值,不对值去进行操作,使用copy即可。

参考文章:
iOS 浅谈:深.浅拷贝与copy.strong

你可能感兴趣的:(copy还是strong?用copy还是mutablecopy)