基础知识:
1.iOS中要实现copy与mutableCopy,需要遵守,
2.浅拷贝拷贝对象,不拷贝对象中的属性,深拷贝拷贝对象及属性.
3.对于可变对象,使用copy或者mutableCopy都是深拷贝,对于不可变对象,copy方法是浅拷贝, mutableCopy是深拷贝
验证:
guard let vc = R.storyboard.mine.productEditTVC() else { return } vc.model = self.model.copy() as! ProductModel var productModel = self.model.copy() as! ProductModel debugPrint(productModel) debugPrint(self.model)
以上model是可变的,内部的属性cover及owner是不可变的,copy得到productModel之后打印结果如下:
self.model:
productModel:
可以看出copy可变对象时,copy后的对象的指针发生了改变,如最外层的内存地址改变了,深拷贝;
copy不可变对象时,copy后的对象的指针没有发生改变,如cover及owner,浅拷贝,相当于之前OC中的对对象做了一次retain;
当然,这里有不严谨的地方,我是直接用了深拷贝会拷贝对象及内部属性这个结论,也就是copy model的时候同时copy了cover及owner属性,有兴趣的可以拆开来验证.
实例:
当由A界面跳转到B界面的时候,B界面需要使用A界面的数据,如果我们直接赋值,如果是浅拷贝,那么当在B界面数据被改变后,A界面的数据也是同时会被改变的,所以当由A界面跳转B界面的时候,我们要使用深拷贝,保证数据不受影响,如果跳转回来需要用到改变后的数据的话可以使用闭包带回来,减少页面之间的耦合性.