跳转至

copy

  • copy都是不可变
  • mutableCopy都是可变
  • 只有不可变的copy是浅拷贝(指针拷贝),其它的都是深拷贝(内容拷贝)。

两个数组 一个数组里面的元素是另外一个数组里面的元素。改变其中一个数组中的元素另一个数组也会改变。

需要对元素 实现copy协议。

array1 = [[NSMutableArray alloc]initWithArray:array0 copyItems:YES];

数组里面是模型的,模型是不拷贝的!

元素遵循协议

实现- (id)copyWithZone:(NSZone *)zone方法。

深浅拷贝

浅拷贝

使用一个已知实例对新创建实例的成员变量逐个赋值,浅拷贝的对象跟原对象存在公共的引用指向对象。实例对象的属性指向的同一块儿内存地址。

深拷贝

当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。值拷贝 新的地址空间,指向的内存地址不是同一个。

通过对象的序列化跟反序列化,实现一个对象的深克隆

对于Model

model.copy浅拷贝

model.mutableCopy需要实现copy协议,model里面的子model也会拷贝。属于深拷贝。