自定义类实现<NSCopying>协议

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

目的:自定义一个 Person 类,实现 copy.

首先定义一个 Person 类,由于是自定义类,为了能够支持 copy 方法,需要实现<NSCopying>协议

@interfacePerson : NSObject<NSCopying>@PRoperty (nonatomic, retain)NSString*name;

@property (nonatomic, retain)NSString*sex;- (void)setName:(NSString *)name

sex:(NSString*)sex;@end

<NSCopying>协议中有一个 - (id)copyWithZone:(NSZone *)zone方法,需要在 Person 的. m 文件中实现它.

@implementationPerson- (id)copyWithZone:(NSZone *)zone

{idp = [[[selfclass] allocWithZone:zone] init];<span style="white-space:pre">//考虑到 Person 可能会有子类,这里用 id 表示类型[p setName:_name sex:_sex];//设置复制对象的实例变量,否则默认拷贝的对象的实例变量值为空returnp;

}- (void)setName:(NSString *)name

sex:(NSString*)sex

{

_name=name;

_sex=sex;

}@end

在main.m 文件中进行测试

Person * p1 = [[Person alloc] init];//创建 p1 对象[p1 setName:@"张三"sex:@"男"];//为 p1 实例变量赋值Person * p2 = [p1 copy];//从 p1 拷贝一个新对象 p2NSLog(@"p2.name = %@, p2.sex = %@", p2.name, p2.sex);//打印 p2 的 name 和 sexp2.name =@"李四";//更改 p2 的 nameNSLog(@"p2.name = %@", p2.name);

NSLog(@"p1.name = %@", p1.name);//再次打印 p1 的 name,验证 p1 的 name 是否改变

下面是打印结果:

2015-01-2121:27:59.466CopyTest[2053:303] p2.name = 张三, p2.sex =男2015-01-2121:27:59.468CopyTest[2053:303] p2.name =李四2015-01-2121:27:59.468CopyTest[2053:303] p1.name = 张三

可以看出,改变 p2 的 name, 并没有影响 p1 的name.

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航