- 概念
- 浅复制
- 被复制对象的所有变量都含有与原来的对象相同的值,而其所有的对其他对象的引用都仍然指向原来的对象
- 深复制
- 被复制对象会将所有非引用类型的字段复制给新对象,同时将引用类型所指向地址中存的对象复制给新的对象
- 区别及用途
- 区别
- 浅复制就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间
- 深复制是指复制对象的具体内容,而内存地址是自主分配的,复制结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉
- 浅复制和深复制的区别仅在于对引用类型的对待上,一个是复制的地址,一个是复制的地址指向位置的数据
- 区别补充
- 一个对象中的变量有的是值类型的,有的是引用类型的.对于值类型来说,它的值就是单纯的值,而对于引用类型来说,它的值是地址
- 当一个对象其中的引用字段所指向的地址中的变量变化时,所有浅复制对象中的该引用字段都会发生变化
//引用字段有点儿类似OS X系统下的symlink , 即符号连接 , 指向其路径信息 , 在这里为地址(指针)信息
(其实不是OS X的独有 , Unix like系统都有 , Windows也有类似的)
- 作用及注意点
- iOS 中不是所有的对象都支持copy/mutableCopy,遵守NSCopying协议的类可以发送copy消息,遵守NSMutableCopying协议的类才可以发送mutableCopy消息
- 浅复制作用是使得两个对象的成员的值保持一致,在给对象赋值和参数传递的场合使用,有时候一个类中没有指针成员,浅复制就比较合适
- 在给一个对象赋值另一个对象,要实现的功能是在对后一个对象做修改或其他操作对原有对象没有影响,这种情况我们就要做深复制
|
|