iOS对象深浅拷贝

410 阅读1分钟
  • 非集合对象
    在非集合类对象中,对immutable对象进行copy操作,是指针复制,mutableCopy操作时是内容复制;对mutable对象进行copy和mutableCopy都是内容复制。
    [imutableObj copy]//浅复制
    [imutableObj mutableCopy]//深复制
    [mutableObj copy]深复制
    [mutableObj mutableCopy]深复制
  • 对于集合类对象
    在集合类对象中,对immutable对象进行copy,是指针复制,mutableCopy是内容复制;对mutable对象进行copy和mutableCopy都是内容复制。但是:集合对象的内容复制仅限于对象本身,对象里元素仍然是指针复制。
    [immutableObject copy] // 浅复制
    [immutableObject mutableCopy] //单层深复制
    [mutableObject copy] //单层深复制
    [mutableObject mutableCopy] //单层深复制

自己总结:无论是集合类还是非集合类,如果是不可变对象,copy的话,都是浅拷贝,mutableCopy都是深拷贝。 如果是可变对象,无论copy还是mutableCopy都是深拷贝。 因为,可变对象copy出去的副本,不希望自己改变时,副本也跟着改变;副本改变时,自己也不希望跟着改变 。 不可变对象,同理,copy的话,副本无法再操作,可以是浅拷贝,mutableCopy,如果是浅拷贝的话,副本的操作,会影响原对象自己,这是不希望出现的,所以,是深拷贝。

最终:copy和mutableCopy都希望操作之后,原件和副本两个对象之间相互不影响。
以上均为个人试验测试,理解,如有问题,还请指出,多谢。


可变数组的复制

可变数组的复制.png

不可变数组的复制

不可变数组的复制.png

copy1.png

copy2.png

copy3.png

copy4.png

字符串复制

字符串复制.png

不可变字符串属性赋值操作

不可变字符串属性赋值操作.png

可变字符串属性赋值

可变字符串属性赋值.png