OC--copyWithZone:(NSZone *)zone

来源:互联网 发布:助手网络连接失败 编辑:程序博客网 时间:2024/05/31 18:59

通过-(id)copyWithZone:(NSZone *)zone;我们就可以实现给对象提供拷贝的功能。对于很多现有类,如NSStringNSDictionary,。。。这个方法已经实现,但是当我们需要多次用到一个对象时,比如说物流的信息,就需要自己来动手写CopyWithZone的方法。

1、实现NSCopying:不继承copyWithZone:的类,使用allocinit...

2、实现NSCopying:继承copyWithZone:的类,调用父类的copyWithZone:。如果超类的实现使用NSCopyObject功能,必须对retain对象的指针实例变量作出明确的指派。

3、实现NSCopying:通过retain原有的,而不是创建一个新的副本,如果类和它的内容是不可改变的。

如果子类从它的超类继承NSCopying,并声明了额外的实例变量,子类在重写copyWithZone:妥善处理自己的实例变量之前需先调用父类的实现。


 用户自定义类遵守<NSCopying>协议和<NSMutableCopying>协议,则必须实现copyWithZone方法和mutableCopyWithZone方法,否则该类对象无法响应copymutableCopy消息

 如果你的类产生了子类,那么copyWithZone:方法也将被继承

Student *stu = [[Student allocWithZone: zone] init];

该方法应该改为: Student *stu = [[[self class]allocWithZone: zone]init];

如果编写一个类的copyWithZone:方法那么子类的方法应该先调用父类的copy方法以复制继承来的copy实例变量.



1 0
原创粉丝点击