zoukankan      html  css  js  c++  java
  • 示例解释深拷贝和浅拷贝IOS


    --------------转载请注明源地址:http://blog.csdn.net/u013082522/article/details/19932977

    最近了解到了一些深拷贝和浅拷贝的区别.

    整理如下:

    比如我们创建了一个Person类,有name(NSString类型)以及age(int类型)两个属性.

    好了.现在我们先实例化一个Person对象.并给他一个初始值/

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

    [p1 setName:@"XuKunHenWuLiao"];

    [p1 setAge:18];

    需求出现了.我们需要对p1进行(copy)操作.

    浅拷贝:p2 = [p1 copy];p2的age是新生成的18,但是name却是指向与p1.name相同的内存区.

    深拷贝:p2 = [p1 copy];p2的age和name都与p1的name指向的内存地址不同;

    总结来说:

    浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用.
    深拷贝(深度克隆):不仅复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的.

    遵循NSCoping协议的类才可以使用深拷贝.

    如果一个我们自定义的类,也就是复杂的类,若想使用深拷贝,我们就需要让我们的类,实现NSCoping协议,而且需要重写协议中的方法.

    @protocol NSCopying

    - (id)copyWithZone:(NSZone *)zone;

    @end

    @protocol NSMutableCopying

    - (id)mutableCopyWithZone:(NSZone *)zone;

    @end


  • 相关阅读:
    day103 跨域请求 与频率访问限制.
    day 102 GIT 的使用方法.
    day 101 天
    day 100天 VUE 父子传值,单页面.
    JS 在元素后插入元素
    JS 网页加载后执行多个函数
    MySQL 一般操作语句
    PHP 通过设置表单元素name属性生成数组
    PHP SQL语气中value必须添加单引号
    PHP 单引号和双引号的区别
  • 原文地址:https://www.cnblogs.com/xukunhenwuliao/p/3576190.html
Copyright © 2011-2022 走看看