美文网首页
iOS 深拷贝,浅拷贝与集合类的对象,深拷贝实现

iOS 深拷贝,浅拷贝与集合类的对象,深拷贝实现

作者: 搬砖小工 | 来源:发表于2022-01-19 16:59 被阅读0次

    先上代码github,如有错误请帮忙指出,谢谢!转载请注明出处,喜欢的话,请点个赞吧!

    一、概念

    1、浅拷贝 = 指针拷贝:多了一个指针,指向同一块内存地址(同一个对象)。
    2、深拷贝 = 内容拷贝:多了一个指针,指向不同的内存地址(不同的对象)。

    二、总结
        1、对于不可变的非集合类的对象,copy是浅拷贝,mutableCopy是深拷贝。
        2、对于可变的非集合类的对象,copy和mutableCopy都是深拷贝。
        3、对于不可变的数组,字典等集合类的对象,copy是浅拷贝,mutableCopy是深拷贝。
        4、对于可变的数组,字典等集合类的对象,copy和mutableCopy都是深拷贝。
    

    注:集合类的对象深拷贝拷贝的是本身对象,不包含里面的元素等对象,可以实现完全深拷贝整个集合对象请看下面代码解释

    三、代码解释

    1、不可变的非集合类对象

    image.png
    2、可变的非集合类对象 image.png
    3、不可变的集合类对象 image.png
    4、可变的集合类对象 image.png
    5、集合类对象的object的拷贝情况
    注:集合类对象要实现对象里面的object也拷贝需要执行如下方法
    1、- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag;
    /// 还有更多的归档解档扩展方法,具体请自行了解NSKeyedUnarchiver 
    2、+ (nullable id)unarchivedObjectOfClass:(Class)cls fromData:(NSData *)data error:(NSError **)error
    
    从下图可以得出结论,不支持NSCopying,NSMutableCopying协议的例如NSString,NSNumber拷贝后object的地址还是一致,没有真正的复制一个出来,不过支持NSCopying,NSCoding的协议的object都能进行真正的深拷贝。 image.png
    image.png image.png

    相关文章

      网友评论

          本文标题:iOS 深拷贝,浅拷贝与集合类的对象,深拷贝实现

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