美文网首页
关于深copy和浅copy

关于深copy和浅copy

作者: 张_何 | 来源:发表于2019-11-28 17:33 被阅读0次

    深copy

    • 所谓深copy是指内容copy

    浅copy

    • 所谓浅copy是指指针copy

    集合的单层深copy

    • 在多层数组中,对第一层进行内容拷贝,其它层进行指针拷贝

    自定义对象的copy

    • 对于自定义对象如果声明属性使用了copy字段,或者自定义对象调用copy方法时,都需要改对象类型遵守NSCopying协议,并实现copyWithZone方法
    • 对于浅copy,copyWithZone方法实现如下
    -(id)copyWithZone:(NSZone *)zone {
    //    浅copy
        return self;
    }
    
    • 对于深copy, copyWithZone方法实现如下
    -(id)copyWithZone:(NSZone *)zone {
    //    深copy
        SomeClass *copy = [[self class] allocWithZone:zone];
    // 对属性进行copy
        copy.*** = self.***;
        return copy;
    }      
    
    image.png

    当我们使用copy声明属性的时候,如果没有实现copyWithZone方法会崩溃,图中14行会崩溃,
    当我们对集合进行深copy的时候,同样集合里的元素类型也要实现copyWithZone方法,否则同样会崩溃,图中46 行会崩溃,此时对copyWithZone方法里面的实现没有要求,既可以是浅copy的实现,也可以是深copy的实现,但是既然是要深copy集合,最好实现深copy
    当我们修改Person类的copyWithZone的实现改为浅copy,此时p1 的retainCount 会变为4, p2的retainCount 会变为3

    2019-11-28 17:30:18.516735+0800 ObjcCode[89781:16260783] p1 retainCount 4
    2019-11-28 17:30:18.516935+0800 ObjcCode[89781:16260783] p2 retainCount 3
    

    相关文章

      网友评论

          本文标题:关于深copy和浅copy

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