3、对象拷贝

作者: MartinCQ | 来源:发表于2017-06-05 18:16 被阅读18次

    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)协议

    相关文章

      网友评论

        本文标题:3、对象拷贝

        本文链接:https://www.haomeiwen.com/subject/aeqwfxtx.html