美文网首页
iOS 之深浅拷贝

iOS 之深浅拷贝

作者: 碎梦_aimee | 来源:发表于2019-08-16 16:46 被阅读0次

1. 深浅copy的本质区别:

浅copy VS 深copy
  • 深copy: 在拷贝对象自身的时候,将底层数据也进行了复制过去。
  • 浅copy: 只拷贝容器本身,不拷贝其中的数据(只拷贝指针)
深copy

打印输出结果:


输出结果:深copy内存地址会改变

由此可见:

两个数组虽然数据一致,但是所指的内存地址不同,说明 mutableCopy 在copy的时候,进行了深copy,把array的底层数据也进行了一份copy;如果使用的浅copy,生成新的指针,指向同一个内存地址。

2.copy的几种具体使用情况

  • 字符串和容器数据的copy:

  • 可变的容器数据进行内容操作的时候,根据深浅copy,结果会不同

可变数组array,通过浅copy后生成数组array1,然后在给array新增数据

打印结果:


ADC727BA-8586-4C6A-9907-9DD4259734CD.png
  • 如果是自定义的类,一般需要遵从<NSCopying>协议,才能对其进行copy操作,一般是使用的浅copy

<NSCopying> 协议 一般通过- (id)copyWithZone:(NSZone *)zone 方法实现

  • 如果是给指针重新赋值,则会改变其内存地址,指向新的数据所在内存
NSString * str = @"哈哈哈";
 NSString * str2 = str; //这个操作和copy是一样的处理
 NSLog(@"打印出对应的自身地址2%p  内容指针%p  内容=%@",&str2,str2,str2);
 str2 = @"嘻嘻嘻嘻"; //同一个指针,指向不同的内容地址
 NSLog(@"打印出对应的自身地址2%p  内容指针%p  内容=%@",&str2,str2,str2);
    NSLog(@"打印出对应的自身地址2%p  内容指针%p  内容=%@",&str,str,str);

输出结果:

打印出对应的自身地址20x7ffee6d25960 内容指针0x108ed9078 内容=哈哈哈
打印出对应的自身地址20x7ffee6d25960 内容指针0x108ed90d8 内容=嘻嘻嘻嘻
打印出对应的自身地址20x7ffee6d25968 内容指针0x108ed9078 内容=哈哈哈

原始str 与 str2 是 两个指向同一个内存地址的指针,但是在修改了str2 值后,str2指向了新的内存地址

相关文章

  • iOS 深浅拷贝

    iOS深浅拷贝

  • iOS之深浅拷贝

    1.深拷贝和浅拷贝概念 由上面的图我们可以明确地看出:浅拷贝(Shallow copy):是指针复制,它们指向共同...

  • iOS 之深浅拷贝

    1. 深浅copy的本质区别: 深copy: 在拷贝对象自身的时候,将底层数据也进行了复制过去。 浅copy: 只...

  • iOS 之深浅拷贝 Copy

    Copy的作用 在OC中,copy 是利用一个源对象产生一个副本对象,本质就是当修改源对象的属性和行为,不会影响副...

  • iOS深浅拷贝

    授权转载,作者:西木柚子 OC对象的三种拷贝方式 OC的对象拷贝有如下三种方式,很多时候我们把深复制和完全复制混为...

  • iOS深浅拷贝

    简述深浅拷贝 我们实例化的对象存储在堆区,而指向对象的指针一般存储在栈区。我们需要知道这个前提。  实际上拷贝分为...

  • iOS深浅拷贝

    浅拷贝:复制一个指针,仍然指向已经存在的内存深拷贝:复制一个指针,并新申请一个内存 关于拷贝的引用计数:浅拷贝:a...

  • iOS 深浅拷贝

    一、引言 我们都知道,iOS中的对象,遵守NSCopying 协议的类可以发送copy消息,遵守NSMutable...

  • iOS 深浅拷贝

    http://www.cocoachina.com/cms/wap.php?action=article&id=2...

  • iOS深浅拷贝

    (本文根据CocoaChina上的一篇帖子整理,后期附上链接)最开始,我们需要清楚一些关于内存分配方式的基础知识。...

网友评论

      本文标题:iOS 之深浅拷贝

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