zoukankan      html  css  js  c++  java
  • 自定义的类实现copy操作

    1.自定义类实现copy操作

    • 让类遵守NSCopying协议
    • 实现 copyWithZone:方法,在该方法中返回一个对象的副本即可。
    • 在copyWithZone方法中,创建一个新的对象,并设置该对象的数据与现有对象一致, 并返回该对象.

      zone: 表示空间,分配对象是需要内存空间的,如果指定了zone,就可以指定 新建对象对应的内存空间。但是:zone是一个非常古老的技术,为了避免在堆中出现内存碎片而使用的。在今天的开发中,zone几乎可以忽略

    • 无父类实现

    - (id)copyWithZone:(NSZone *)zone

    {

        // 1.创建一个新的对象

        Person *p = [[[self class] allocWithZone:zone] init];

        

        // 2.设置当前对象的内容给新的对象

        p.age = _age;

        p.name = _name;

        

        // 3.返回新的对象

        return p;

    }

    - (id)mutableCopyWithZone:(NSZone *)zone

    {

        // 1.创建一个新的对象

        Person *p = [[[self class] allocWithZone:zone] init];

        

        // 2.设置当前对象的内容给新的对象

        p.age = _age;

        p.name = _name;

        

        // 3.返回新的对象

        return p;

    }

    • 有父类实现
    1. 不调用父类方法, 无法拷贝父类中继承的属性
    2. 不重写父类copyWithZone, 无法拷贝父类中的特有属性

    - (id)copyWithZone:(NSZone *)zone

    {

        // 1.创建副本

      //id obj = [[self class] allocWithZone:zone];

        id obj = [super copyWithZone:zone];

        // 2.设置数据给副本

      //[obj setAge:[self age]];

      //[obj setName:[self name]];

        [obj setHeight:_height];

        

        // 3.返回副本

        return obj;

    }

  • 相关阅读:
    IDEA 初次使用,记录心得
    排序算法代码总结-java版
    SpringMVC支持多对象Form Data绑定
    密码安全性检查代码
    PERL/LEX/YACC技术实现文本解析--XML解析
    C代码工具--自动生成enum值和名字映射代码
    再谈CSHELL对C程序员的价值
    怎样设计一个运行日志服务
    Excel里内嵌在线翻译
    EOS -- 一种灵巧的系统运行跟踪模块
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6653532.html
Copyright © 2011-2022 走看看