拷贝

作者: Cy_Star | 来源:发表于2017-10-18 17:14 被阅读9次

一、拷贝:

任何实现拷贝功能都需要实现NSCopying协议。

1、深拷贝:

开辟一个新空间,对对象本身进行拷贝以外,还会对对象里包含的子元素逐个进行拷贝,指向的内存新的内存空间。

2、浅拷贝:

开辟一个新的空间,但是空间指向的内容(内存空间、指针)还是原来的内容。

二、copy 和 mutableCopy

NSString * s = [NSString   stringWithFormat:@"hello"];
NSString * s2 = [s copy];
/--这个时候把 s 拷贝了一份 s2 还是一个只读的字符串

NSMutableString * s3 = [s mutableCopy];
[s3 appendString: @"ss"];  
/--这个时候把 s 拷贝了一份 s3 是一个可变的字符串 ,这样可以通过 mutableCopy 可以把不可变的字符串变成可变字符串;
反之也可使用 copy 把可变字符串变成不可变的字符串。

NSMutableString * s4 = [NSMutableString stringWithFormat:@"4444"];
NSMutableString * s5 = [s4 copy];    //---s5 是一个不可变的字符串,copy把可变的变成不可变的。

如果是对类这个对象进行 copy ,就要在类的 .h文件遵循NSCopying协议。

//在类 .m文件里面使用NSCopying协议里的方法
  //一旦使用了 [** copy]; ,这个方法就会得到触发
-(id)copyWithZone: (NSZone *) zone{
          /新分配一个对象
          类 * m = [[self class] allocWithZone: zone]init];
          
          /比如 copy 名字 name
          m.name = self.name;

          return m;
}

//实现上述的类进行 copy 操作  如类是:Dog
 Dog * m1 = [[Dog alloc]init];
 m1.name = "小黄";
 Dog * m2 = [m1 copy]; 
// [m1 copy]; 就会触发  -(id)copyWithZone: (NSZone *) zone; 这个方法。

相关文章

  • 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/direuxtx.html