美文网首页
深浅拷贝

深浅拷贝

作者: iOS扫地僧 | 来源:发表于2017-09-26 11:08 被阅读0次

概念:

浅复制:不拷贝对象本身,仅仅是拷贝指向对象的指针
深复制:是直接拷贝整个对象内存到另一块内存中

注意:这里有一块需要注意的地方,浅拷贝拷贝的是指针,不会产生新的对象,所以指向的对象还是以前的对象,内容还是以前的内容,深拷贝的时候是拷贝整个对象到另一块内存中,产生了新的对象,新对象的指针和之前对象的指针肯定是不一样的,根据指针来寻找对象,一样的话就找到了原来的对象,不是你的新对象,这里有一个理解上的偏差。

copy和mutableCopy使用

    NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
    NSArray *arrayCopy = [array copy];
    NSMutableArray *mArrayCopy = [array mutableCopy];
    NSMutableArray *mArrayCopy2 = [mArrayCopy mutableCopy];
    NSArray *mArrayCopy3 = [mArrayCopy copy];
    NSLog(@"\narray = %p\narrayCopy = %p\nmArrayCopy = %p\nmArrayCopy2 = %p \nmArrayCopy3 = %p",array,arrayCopy,mArrayCopy,mArrayCopy2,mArrayCopy3);

打印

    array = 0x60000045a010
    arrayCopy = 0x60000045a010
    mArrayCopy = 0x60000045a040
    mArrayCopy2 = 0x60000045a070 
    mArrayCopy3 = 0x60000045a0a0

总结:

copy修饰不可变对象,则两个对象的内存地址完全一样,系统并没有创建一个新对象,属于浅拷贝;
copy修饰可变对象,两个对象的内存地址不一样,创建了新的对象,属于深拷贝;
mutableCopy不管是修饰可变对象还是不可变对象,都会产生新的对象,属于深拷贝

相关文章

  • 2018-08-29

    深浅拷贝 1.根据拷贝内容的不同,分为深浅拷贝 深拷贝:内容...

  • js的深浅拷贝

    js的深浅拷贝可以分为数组的深浅拷贝和对象的深浅拷贝 一、数组的深浅拷贝如果只是简单的将数组中的元素付给另外一个数...

  • Python—浅拷贝与深拷贝

    浅拷贝 深拷贝 深浅拷贝的作用

  • 深浅拷贝

    先来了解一下这些:在js中变量类型基本分为两种:基本数据类型和引用数据类型;基本类型:Underfied Null...

  • 深浅拷贝

    浅拷贝是对一个对象的顶层拷贝。通俗的理解就是:拷贝了引用,并没有拷贝内容。 深拷贝是对于一个对象所有层次的拷贝(递...

  • 深浅拷贝

    深浅拷贝.copy 浅拷贝 这是一个方法,浅拷贝修改可变类型是会将原数据也一块修改 Copy.deepcopy 深...

  • 深浅拷贝

    1:is 和 ==的区别 is 是比较两个引用是否指向了同一个对象(地址引用比较)。== 是比较两个对象是否相等。...

  • 深浅拷贝

    函数的传递,与matlab不同,具有以下特点: 1.直接赋值会带来不同ID,例如,a=2,b=2 2.传递引用赋值...

  • 深浅拷贝

    最近一直被问到深浅拷贝的问题。自己也确实不太清楚怎么回事,现在来研究一下。 什么是深浅拷贝 浅拷贝:指针拷贝,不会...

  • 深浅拷贝

    概念: 浅复制:不拷贝对象本身,仅仅是拷贝指向对象的指针深复制:是直接拷贝整个对象内存到另一块内存中 注意:这里有...

网友评论

      本文标题:深浅拷贝

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