美文网首页
copy相关知识点

copy相关知识点

作者: Coder007 | 来源:发表于2016-12-17 17:53 被阅读18次

    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;
    }
    

    相关文章

      网友评论

          本文标题:copy相关知识点

          本文链接:https://www.haomeiwen.com/subject/hitamttx.html