深浅复制

来源:互联网 发布:matlab绘制矩阵点图 编辑:程序博客网 时间:2024/05/18 00:45

前面讲了深浅复制的概念,而实操中我们会遇到更多的情况




我们可以看到这两个copyWithZone方法在ARC下已经是放弃了,这两个方法的使用非常简单,一般的格式如下:

1.实现NSCopying协议



2.实现copyWithZone方法:



3.调用:



我们看看结果:



结果非常明显了,这类似于上篇所讲的情况,所装载的容器发生了深拷贝,但是里面的内容并没有发生什么变化(指向的同一个指针,浅复制)


如果我们需要实现真正的深复制,我们就要在实现里面也要用copy或者mutaCopy



对于自定义的对象,我们如果没有实现copyWithZone方法就使用copy方法,会导致奔溃,同样道理,也要小心属性中的copy关键字,

因为这个copy关键字就是去将它调用copy方法


还有一个方法特别要小心:

- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag;

这个方法相当于帮你一次解决,如果设置NO,则数组“容器”是深复制,而如果设置YES,则是完完全全的深复制,容器数组本身和容器内的对象都是属于深拷贝的新对象。


如果设置YES,同样地如果你不实现copyWithZone,会奔溃。因为它原因就是用copy~





0 0
原创粉丝点击