您好、欢迎来到现金彩票网!
当前位置:21点 > 自定义方法 >

自定义的类如需实现copy方法应注意什么

发布时间:2019-07-04 06:05 来源:未知 编辑:admin

  如果尝试使用自定义类(例如,人类(person类)、地址簿类(myBook类)、分数类(Fraction类))中的copy方法,如

  这种错误,是对于自定义类,要实现使用自己的类进行复制,必须根据NSCopying协议实现其中的一两个方法。

  下面将展示如何为自定义的分数类(Fraction类)添加copy方法。注意:这里描述的复制策略的技巧非常适合于你自己定义的类。如果这些类是任何Foundation类的子类,那么可能需要实现较为复杂的复制策略。必须考虑这样一个事实:超类可能已经实现了它自己的复制策略。

  实现NSCopying协议时,类必须实现copyWithZone:方法来响应copy消息。(这条copy消息仅将一条带有nil参数的copyWithZone:消息发送给你的类)。注意,如果想要区分可变副本和不可变副本,那么copyWithZone:应该返回不可变副本,而mutableCopyWithZone:应该返回可变副本。产生对象的可变副本并不要求被复制的对象本身也是可变的(反之亦然),想要产生不可变副本的可变副本是很合理的(例如,字符串对象)。

  该程序创建了一个名为f1的Fraction对象并将其设置为2/5.然后,它调用copy方法来产生副本,copy方法向你的对象发送copyWithZone:消息,这个方法产生了一个新的Fraction,将f1的值复制到其中,并返回结果。回到main函数中,再将这个结果赋值给f2.随即,将f2中的值设置为分数1/3,这样就验证了这些操作对原始分数f1是没有影响的。

  如果你的类可以产生子类,那么copyWithZone:方法将被继承。在这种情况下,该方法中的程序行:

  这样,可以从该类分配一个新的对象,而这个类的copy的接收着(例如,如果它产生了一个名为NewFraction 的子类,那么应该确保在继承的方法中分配了新的NewFraction对象,而不是Fraction对象)。

  如果编写一个类的copyWithZone:方法,而该类的超类也实现了NSCopying协议,那么应该先调用超类的copy方法以复制继承来的实例变量,然后加入自己的代码以复制想要添加到该类中的任何附加的实例变量(如果有的话)。

http://texastop40.com/zidingyifangfa/117.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有