码迷,mamicode.com
首页 > 其他好文 > 详细

自定义的类实现copy操作

时间:2017-03-31 21:32:00      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:elf   height   拷贝   size   blog   self   碎片   技术   class   

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;

}

  • 有父类实现
  1. 不调用父类方法, 无法拷贝父类中继承的属性
  2. 不重写父类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操作

标签:elf   height   拷贝   size   blog   self   碎片   技术   class   

原文地址:http://www.cnblogs.com/xufengyuan/p/6653532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!