深拷贝与浅拷贝

来源:互联网 发布:58端口多少钱一个月 编辑:程序博客网 时间:2024/06/11 11:12

1.深拷贝与浅拷贝

深拷贝与浅拷贝的区别:

浅拷贝指的是指针,相当于对对象的指针拷贝,这个指针存有这个对象的内存地址,所以就是一个对象有两个指针,那么他的引用计数是2,如果销毁这个对象,那么必须对这两个指针进行置空,要不就成为了野指针了。

深拷贝指的是对象,相当于对对象进行复制一个新的内存地址,并有个新指针指向这块新内存地址。所以说内存中会存在两块大小相同的内存,存放相同的对象,但是地址不同。如果新拷贝的对象被释放,那么对旧对象没任何影响。

要自定义一下copy 需要遵循NSCopying协议,实现- (id)copyWithZone:(NSZone *)zone 方法而发送copy消息,要实现mutableCopy 则需要遵循NSMutableCopying协议,实现- (id)mutableCopyWithZone:(NSZone *)zone 方法而发送mutableCopy消息,如果发送了一个没有遵守上诉两协议而发送 copy或者 mutableCopy,那么就会发生异常。,一般属性property的修饰符copy代替的就是就是前者,在进行赋值操作的时候实际上就是调用这个- (id)copyWithZone:(NSZone *)zone 方法。

那么还有对一个是否可变的对象进行copy、mutableCopy。

那么结论就是:如果对于一个不可变对象的话,copy是浅拷贝,mutableCopy是深拷贝。

 如果对于一个可变对象的话,两者都是深拷贝。


0 0
原创粉丝点击