自定义的类实现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;

}

时间: 2024-10-25 18:57:20

自定义的类实现copy操作的相关文章

自定义实体类在三层架构之间传递数据

自定义实体类是专门承载业务实体数据的类,一般将方法分离出来,只包含属性和字段的定义.每个实体类对应数据库中的一个表,每个属性对应表中的一个相应的字段.使用实体类属于面向对象编程的思想,将每个表封装成对应的类. 1. 为什么使用自定义实体类 (1)使程序更加灵活.如果数据库发生了更改,只需要修改数据实体类的代码,其他层的代码修改量很小. (2)使用面向对象思想将数据库中的表抽象为类,消除了关系数据与类的差别,使程序维护和扩展更方便. (3)更有利于分层架构设计. 2. 使用自定义实体类作为三层架构

C++ 运算符重载四(自定义数组类)

//自定义数组类 #include<iostream> using namespace std; //分析:能获取数组长度,添加元素,删除元素,修改元素 //要求重载[],=,==,!=运算符 class MyArray { private: int mLength; int* mSpace; public: MyArray(int length){ cout << "有参构造函数被调用了1" << endl; mLength = length; m

Cocos2d-x 自定义按钮类控制精灵攻击----之游戏开发《赵云要格斗》

本篇要讲讲怎么自定义按钮类,并通过这个按钮类的对像来控制精灵的攻击.在看本篇之前最好先看看上一篇 Cocos2d-x虚拟摇杆控制精灵上下左右运动----之游戏开发<赵云要格斗>,要素材和项目代码的把邮箱留下吧,因为这个项目还没弄完,我一直在改. 精灵的攻击也是一个动画,只不过,这个动画只播放一次,相当于在界面上加一个按钮,然后你点一次按钮,精灵就播放一次动画. 一.自定义按钮类 按钮可以用COCOS2D-X自带的,想着方便一点,我就自己封装了一个按钮类ControlButton,在里面添加一个

第五十八课、自定义模型类(上)------------------狄泰软件学院

 一.自定义模型类 1.QStandardItemModel是一个通用的模型类 (1).能够以任意的方式组织数据(线程.非线性) (2).数据组织的基本单位为数据项(QStandardItem) (3).每一个数据项能够存储多个具体数据(附加数据角色) (4).每一个数据项能够对数据状态进行控制(可编辑.可选...) 2.Qt中的通用模型类QStandardItemModel (1).QStandardItemModel继承自抽象的模型类QAbstractItemModel (2).QStand

Java Calendar 类的时间操作

Java Calendar 类的时间操作 标签: javaCalendar时间Date 2013-07-30 17:53 140401人阅读 评论(7) 收藏 举报 分类: 所有(165) Java 算法(24) 版权声明:本文为博主原创文章,未经博主允许不得转载. JavaCalendar 类时间操作,这也许是创建日历和管理最简单的一个方案,示范代码很简单. 演示了获取时间,日期时间的累加和累减,以及比较. 原文地址:blog.csdn.NET/joyous/article/details/9

kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件

该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义功能的实现改为在eclipse等ide中开发. 设计本插件的原因是直接在kettle中写java代码是很不容易的事,开发体验与eclipse差得远,java语法还要受到限制,调试麻烦.实现点简单的逻辑还行,稍微复杂一点就比较麻烦,需要对java和kettle相关接口很熟悉.而简单的功能可以采用jav

帝国cms调用栏目自定义字段(栏目简介)如何操作

开源的cms就像一个操作系统,可以满足大部分人的需求,如果你想增加一些特殊的功能,那就二次开发呗,就像APP一样.帝国cms默认的栏目是没有调用栏目自定义字段的,我们可以增加一些概述类的文字,让读者对这个页面有个大概的了解,挺高一些用户体验. 帝国cms调用栏目自定义字段(栏目简介)如何操作呢? 栏目自定义字段调用说明 内置调用栏目自定义字段函数:ReturnClassAddField(栏目ID,字段名),栏目ID=0为当前栏目ID.取多个字段内容可用逗号隔开,例子: 取得'classtext'

(译)Getting Started——1.3.4 Writing a Custom Class(编写自定义的类)

 在开发IOS应用中,当你编写自定义的类时,你会发现很多的特殊场合.当你需要把自定义的行为和数据包装在一起时,自定义的类非常有用.在自定义的类中,你可以定义自己的存储.处理和显示数据的方法. 例如,IOS Clock应用中的World Clock面板.table view中的单元格需要显示比标准table view单元格更多的显示内容.这就是一个很好的机会来实现一个继承了UITableViewCell类的子类,用于在给定的table view单元格中显示更多的自定义内容.如果你正在设计自定义的类

JAVA之IO技术自定义装饰类MybufferedReader

package ioTest.io2; import java.io.FileReader; import java.io.IOException; /* * 自定义的BufferedReader类 * MyBufferedReaderDemo:也是为了提高对流的操作性能. * 所以构造函数中应该将流传入 * * --------拓展:装饰设计模式 * 装饰设计模式是28种设计模式之一.目的是为了增强功能. * 将被增强的类A->增强类B * 将A的对象做为参数,传递给B,让B类对A类进行增强.