Copy与MutableCopy区别
1、首先这两个都是对对象的进行拷贝操作,但是拷贝涉及到深拷贝和浅拷贝
深拷贝:对象的拷贝,拷贝完了之后是两个不同的对象,只是对象的属性和值是相同的。对其中一个对象进行操作“不会”影响到另一个对象。
浅拷贝:指针的拷贝,只是将源对象的指针拷贝到另一个地方去,产生了两个指针指向的是同一个对象,对一种一个对象进行操作“会”影响到另一个对象。
以数组为例:
[array copy]; //对一个不可变数组进行copy, 赋值指针无新对象产生,浅拷贝
[mutableArray copy];//对一个可变数组进行copy,产生一个新的不可变数组,深拷贝
[array mutableCopy];对一个不可变数组进行mutable copy,产生一个新的可变数组,深拷贝
[mutableArray mutableCopy];//对一个可变数组进行mutable copy,产生一个新的可变数组
自定义对象不能拷贝,除非实现了copy协议和mutablecopy协议
判断数组的深拷贝或浅拷贝,看数组里面元素的地址是否重新拷贝,但是也仅仅是拷贝内容一层,若内容中还有数组则那个内容种数组的内容是相同的,也就是浅拷贝
完全深拷贝
dataArray3 = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:dataArray2]];
不管多少层都可以进行了深拷贝,但是必须要数组中的元素实现结归档(NSCoding)协议
网友评论