拷贝

作者: 愤怒的八哥 | 来源:发表于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

相关文章

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

  • 深拷贝和浅拷贝

    1.深拷贝:地址的拷贝 2.浅拷贝:是值得拷贝 深拷贝和浅拷贝的区别 A拷贝B B变A变是浅拷贝 A拷贝B B变A...

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

  • JavaScript之深拷贝与浅拷贝

    深拷贝和浅拷贝 深拷贝:改变拷贝后的结果,不会影响拷贝之前的内容 浅拷贝:改变拷贝后的结果,会影响拷贝之前的内容 ...

  • java 对象的拷贝

    拷贝:即复制 对象拷贝:即对象复制 java 对象拷贝分类:浅拷贝、深拷贝 java 对象的浅拷贝和深拷贝针对包含...

  • iOS--拷贝相关题

    1、什么是深拷贝什么是浅拷贝?浅拷贝和深拷贝的区别 * 浅拷贝(shallow copy):指针拷贝,对于被拷贝对...

  • copy和mutableCopy的区别

    1,深拷贝和浅拷贝的区别 浅拷贝:并不拷贝对象本身,仅仅是拷贝指向目标对象的指针,并没有拷贝内容;深拷贝:直接拷贝...

  • 深拷贝、浅拷贝的理解与使用场景

    什么是深拷贝、浅拷贝? 通俗解释:深拷贝是内容拷贝,浅拷贝是地址拷贝 区别点: 深拷贝会创建一个新的内存空间,拷贝...

  • 2017.7.24总结

    1、深拷贝与浅拷贝浅拷贝是对于一个对象的顶层拷贝,拷贝了引用,没有拷贝内容。 深拷贝是对于一个对象所有层次的拷贝。...

网友评论

      本文标题:拷贝

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