自定义的类实现copy操作
Posted iFat的笔记本
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义的类实现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;
}
- 有父类实现
- 不调用父类方法, 无法拷贝父类中继承的属性
- 不重写父类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;
}
以上是关于自定义的类实现copy操作的主要内容,如果未能解决你的问题,请参考以下文章