美文网首页
iOS 真正的理解深浅拷贝

iOS 真正的理解深浅拷贝

作者: 波妞和酱豆子 | 来源:发表于2018-03-07 17:09 被阅读49次

此篇文章为了纪念26K的大神

举个🌰

有一个对象,Person 里面有两个属性 name,age 假设都是字符串 这时候调用Pereson copy

要知道,自定义对象想支持copy 需要实现coping协议,实现copy函数

copyWithZone

具体是深拷贝 还是浅拷贝 就看这个函数怎么实现了

/**  浅拷贝 */
- (id)mutableCopyWithZone:(NSZone *)zone{

    Person *person =  [[Person allocWithZone:zone] init];
    person.age = self.age;
    person.name = self.name;
    
    return person;
}
/**  深拷贝 */
- (id)mutableCopyWithZone:(NSZone *)zone{

    Person *person =  [[Person allocWithZone:zone] init];
    person.age = [self.age copy];
    person.name = [self.name copy];
    //注意如果Person包含了别的自定义对象,那每个属性都要这样copy
    return person;
}

不能理解的话 这里还有两张图可以看图理解一下


浅拷贝
深拷贝
  • 浅拷贝即使copy出一个新的对象但它的属性还是指向旧对象的内存地址
  • 而深拷贝的话 就是copy出一个和旧对象一点关系都没有的新对象 保证所有属性都开辟出新的内存空间

新的Person肯定是新的对象 新的内存地址 ,这样才发生了 copy 行为,像网上说的没有新内存地址那个不叫拷贝,那叫赋值

总结:
1.就是深拷贝是完整的复制了一个人,这个人复制出来就和本人没关系了,各自修改属性啥的都不影响
2.而浅拷贝可能会受到本人的改变而改变,因为他的各种属性还是指向本人的内存地址

系统级的函数 都是浅拷贝
所有集合类API 都是浅拷贝

新增内容

相关文章

  • iOS 真正的理解深浅拷贝

    此篇文章为了纪念26K的大神 举个? 有一个对象,Person 里面有两个属性 name,age 假设都是字符串 ...

  • iOS 深浅拷贝

    iOS深浅拷贝

  • iOS 深浅拷贝 为什么NSString使用copy

    理解iOS 深浅拷贝 为什么NSString使用copy 浅拷贝: 指针拷贝,复制一个新的指针,只想同一块内存区域...

  • 理解深浅拷贝

    浅拷贝就是拷贝后,并没有进行真正的复制,而是复制的对象和原对象都指向同一个地址 深拷贝是真正的复制了一份,复制的对...

  • 深浅拷贝理解

    先看最简单的赋值 (a=b) 浅拷贝 补充说明浅拷贝 如图 深拷贝

  • iOS 拷贝问题

    iOS 拷贝问题 之前在孙**同学面试过程中,发现一些自己对深浅拷贝、可变不可变拷贝的理解有问题,后来在网上也发现...

  • 理解深浅拷贝以及深浅拷贝的方法

    先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数...

  • 关于iOS中深浅拷贝的理解

    在iOS开发过程中,我们要对某个对象进行拷贝的时候,一般会用copy和mutableCopy两种方法,在刚接触iO...

  • iOS深浅拷贝

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

  • iOS深浅拷贝

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

网友评论

      本文标题:iOS 真正的理解深浅拷贝

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