深拷贝和浅拷贝

1、如果开始是可变的(nsmutablestring)-copy和mutablecopy之后都会产生新的对象,生成两块内存。(深度拷贝,产生新对象)

如果开始是不可变的(string)-copy(不产生新对象,地址拷贝,指针拷贝,浅拷贝)-mutablecopy-(深度拷贝,产生新对象)

Xcode中大多数为浅拷贝!


深拷贝和浅拷贝_第1张图片

2、对象的拷贝 copy会遵循NSCopying协议,实现该协议的copyWithZone方法,此方法内部声明的也为copy,没有mutablecopy。

如果在@property中声明为copy,则后面的变量为不可变的;如果变量为可变的,则在@property中声明为strong。

strong出来的变量,赋值给strong变量的对象属性改变,则此变量改变,为同一块内存,没有产生新的变量。copy出来的变量,为另一个新的对象,此变量的值不会随着赋值给此变量的变量而改变。

你可能感兴趣的:(深拷贝和浅拷贝)