深浅拷贝

概念:

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

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

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不管是修饰可变对象还是不可变对象,都会产生新的对象,属于深拷贝

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近一直被问到深浅拷贝的问题。自己也确实不太清楚怎么回事,现在来研究一下。 什么是深浅拷贝 浅拷贝:指针拷贝,不会...
    琦天大圣阅读 2,958评论 0 2
  • Copy的作用 在OC中,copy 是利用一个源对象产生一个副本对象,本质就是当修改源对象的属性和行为,不会影响副...
    骑行怪状阅读 7,180评论 3 5
  • 一、深浅拷贝 1、 什么是深拷贝? 深拷贝是对内容的拷贝,复制内容,同时有新的指针指向该内存区域; 2、什么是浅拷...
    Ching_Han阅读 3,833评论 0 5
  • 道歉 之前我的一篇关于深浅拷贝的文章,里面有诸多错误,主要是混淆了混淆copy、mutableCopy和深浅拷贝,...
    西木柚子阅读 8,439评论 20 46
  • 一、首先说下概念 浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间,当内存销毁的时候,...
    为什么划船不靠桨阅读 2,828评论 0 2

友情链接更多精彩内容