zoukankan      html  css  js  c++  java
  • iOS深复制和浅复制

    1、copy关键字

    1> 浅拷贝与深拷贝

    浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。

    深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。

    2> copy和mutableCopy

    copy:对于可变对象为深复制,引用计数不改变;对于不可变对象是浅复制,引用计数每次加一。始终返回一个不可变对象。

    mutableCopy:始终是深复制,引用计数不改变。始终返回一个可变对象。

    3> 自定义类copy的实现

    步骤:

    1、导入<NSCopying>协议

    2、实现copyWithZone方法

    3、[object copy]

    注意:自定义对象中包含其它对象指针时,要考虑深复制与浅复制的问题

    举例:

    - (id)copyWithZone:(nullable NSZone *)zone {

        

        Person * p = [[Person alloc] init];

        p.age = _age;

        p.name = _name;//浅复制

        p.dog = [_dog copy];//深复制

        return p;

    }

    4> 为什么用copy修饰NSString,而不是strong?

    因为父类指针可以指向子类对象,使用copy的目的是为了让本对象的属性不受外界影响,使用copy无论给我传入是一个可变对象还是不可对象,我本身持有的就是一个不可变的副本,如果我们使用是strong,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,那么会影响该属性.

  • 相关阅读:
    浅谈Java中的对象和对象引用
    学习Python要知道哪些重要的库和工具
    Python新手最容易犯的十大错误
    java截取字符串中的数字
    Android 多语言
    R语言学习笔记(二): 类与泛型函数
    R语言学习笔记(一):mode, class, typeof的区别
    代理实现方式
    如何将链表反转
    同步锁之lock
  • 原文地址:https://www.cnblogs.com/dxb123456/p/5504044.html
Copyright © 2011-2022 走看看