copy相关知识点

copy相关知识点

  • copy 和 mutableCopy 都是创建副本,只是copy创建的是不可变副本,mutableCopy创建的是可变副本
  • 深拷贝:内容拷贝,是两个对象,改变其中一个不会影响另一个
  • 浅拷贝:指针拷贝,是一个对象,引用计数器加一,改变其中一个会影响另一个
  • 只有当不可变对象创建不可变副本的时候是浅拷贝,其他的都是深拷贝
只有NSString、NSArray、NSDictionary执行copy操作时才是浅拷贝
自定义类实现copy、mutableCopy操作
  • 让类遵守<NSCopying, NSMutableCopying>
  • 让类显示相应的方法
- (id)copyWithZone:(NSZone *)zone
{
    // 1.创建一个新的对象
    Person *p = [[[self class] allocWithZone:zone] init];
    
    // 2.设置当前对象的内容给新的对象
    p.name = _name;
    
    // 3.返回新的对象
    return p;
}
- (id)mutableCopyWithZone:(NSZone *)zone
{
    // 1.创建一个新的对象
    Person *p = [[[self class] allocWithZone:zone] init];
    
    // 2.设置当前对象的内容给新的对象
    p.name = _name;
    
    // 3.返回新的对象
    return p;
}
  • 需要注意一点,当子类也需要实现copy、mutableCopy操作的时候
  • 由于父类遵守了协议,并且实现了方法,只需要在子类中重写方法就可以了
- (id)copyWithZone:(NSZone *)zone
{
    // 1.创建副本
    id obj = [super copyWithZone:zone];
    // 2.设置数据给副本
    // 这里设置的数据是子类独有的属性,父类的属性已经在上一句代码中完成了
    [obj setHeight:_height];
    
    // 3.返回副本
    return obj;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容