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;
}

最新文章

  1. Codeforces CF#628 Education 8 B. New Skateboard
  2. 学习笔记:MySQL数据库初步 概念
  3. MySql增删改查命令
  4. display:inline-block 去除间隙
  5. UE4在C++中使用OnComponentBeginOverlap之类的时间
  6. [游戏模版10] Win32 平面地图贴图 正
  7. BZOJ1444 : [Jsoi2009]有趣的游戏
  8. HTTP一次请求的过程
  9. hihoCoder #1040 (判断是否为矩形)
  10. autofac meta
  11. c#循环
  12. curl的使用基本流程,HTTP的get请求,post请求
  13. SpringBoot如何新建一个项目 2017.12.14
  14. MySQL 服务常用操作命令
  15. 让PETSc跑得再快一些
  16. 《Java性能优化权威指南》
  17. 对只转发结果集的无效操作:last
  18. 1、redis之安装与配置
  19. [渗透技巧] Windows命令行下载
  20. re 模块 常规方法使用

热门文章

  1. Linux设置主机名与hosts映射
  2. 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行
  3. 编写Java程序,通过给定可变参数方法,计算任意给定的多个int类型数据之和
  4. 初识python: 回调函数
  5. Flask_环境部署(十六)
  6. django中的时区问题
  7. Presto 在字节跳动的内部实践与优化
  8. hisql orm update表数据更新文档
  9. 性能优化-使用双buffer实现无锁队列
  10. 《剑指offer》面试题42. 连续子数组的最大和