- 非集合对象
在非集合类对象中,对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都希望操作之后,原件和副本两个对象之间相互不影响。
以上均为个人试验测试,理解,如有问题,还请指出,多谢。
可变数组的复制 不可变数组的复制 字符串复制 不可变字符串属性赋值操作 可变字符串属性赋值