拷贝

作者: 愤怒的八哥 | 来源:发表于2019-02-12 17:42 被阅读0次

    copy的特点:
    修改源对象的属性和行为,不会影响副本对象
    修改副本对象的属性和行为,不会影响源对象


    深浅拷贝的区别
    浅拷贝:指针拷贝,不产生新的对象,源对象的引用计数器+1;
    深拷贝:对象拷贝,会产生新的对象,源对象的引用计数器不变;
    判断是浅拷贝和深拷贝就看一下两个变量的内存地址是否一样,一样就是浅拷贝,不一样就是深拷贝,也可以改变一个变量的其中一个属性值看两者的值都会发生变化;


    NSObject类提供了copy和mutableCopy方法,通过这两个方法即可拷贝已有对象的副本,主要的系统原生对象有:NSString和NSMutableString、NSArray和NSMutableArray、NSDictionary和NSMutableDictionary、NSSet和NSMutableSet。 NSValue和NSNumber 只遵守的NSCopying协议。
    注意:基本数据类型(assign修饰),没有对应的指针,是直接赋值操作,没有,也无需copy 操作。


    自定义对象拷贝
    需要实现 NSCopying 或NSMutableCopying协议

    -(id)copyWithZone:(NSZone *)zone;
    -(id)mutableCopyWithZone:(NSZone *)zone;
    

    在这两个方法中实现深拷贝。也就是说所有的成员变量都是新内存空间,不仅仅是指针拷贝。

    总结:
    用copy修饰的 或者赋值的 变量肯定是不可变的。
    用copy赋值,要看源对象是否是可变的,来决定只拷贝指针,还是也拷贝对象到新的内存空间,若源对象不可变,拷贝指针;可变,拷贝对象到新的内存空间
    对象之间mutableCopy赋值,肯定会拷贝整个对象内存到新的内存中
    对象之间赋值之后,再改变,遵循互不影响的原则


    参考:
    https://blog.csdn.net/u011363981/article/details/72426342
    https://www.zybuluo.com/MicroCai/note/50592

    相关文章

      网友评论

          本文标题:拷贝

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