首页 > 代码库 > 自定义类实现<NSCopying>协议
自定义类实现<NSCopying>协议
目的:自定义一个 Person 类,实现 copy.
首先定义一个 Person 类,由于是自定义类,为了能够支持 copy 方法,需要实现<NSCopying>协议
@interface Person : 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 文件中实现它.
@implementation Person- (id)copyWithZone:(NSZone *)zone{ id p = [[[self class] allocWithZone:zone] init];<span style="white-space:pre"> //考虑到 Person 可能会有子类,这里用 id 表示类型 [p setName:_name sex:_sex]; //设置复制对象的实例变量,否则默认拷贝的对象的实例变量值为空 return p;}- (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 拷贝一个新对象 p2 NSLog(@"p2.name = %@, p2.sex = %@", p2.name, p2.sex); //打印 p2 的 name 和 sex p2.name = @"李四"; //更改 p2 的 name NSLog(@"p2.name = %@", p2.name); NSLog(@"p1.name = %@", p1.name); //再次打印 p1 的 name,验证 p1 的 name 是否改变
下面是打印结果:
2015-01-21 21:27:59.466 CopyTest[2053:303] p2.name = 张三, p2.sex = 男2015-01-21 21:27:59.468 CopyTest[2053:303] p2.name = 李四2015-01-21 21:27:59.468 CopyTest[2053:303] p1.name = 张三
可以看出,改变 p2 的 name, 并没有影响 p1 的name.
自定义类实现<NSCopying>协议
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。