美文网首页
不完全深拷贝要实现完全深拷贝

不完全深拷贝要实现完全深拷贝

作者: 丨十三叔丨 | 来源:发表于2019-04-28 11:20 被阅读0次

    需求:默认状态下深拷贝指的是不完全深拷贝, 如要实现完全深拷贝, 则要重写copyWithZone: 方法, 自行实现完全深拷贝的
    实现:大体思路如下, 在copyWithZone: 里对象赋值上不直接赋值而是通过copy方法即可实现


    // Person.m
    - (id)copyWithZone:(NSZone *)zone
    {
        Person *cpyPerson = [[Person allocWithZone:zone] init];
        cpyPerson.name = self.name;
        cpyPerson.age = self.age;
        return cpyPerson;
    }
    // NSArray
    - (id)copy
    {
        NSArray *cpyArray = [[NSArray alloc] initWithArray:self copyItems:YES];
        return cpyArray;
    }
    // main.m
    Person *p1 = [[Person alloc] init];
    Person *p2 = [[Person alloc] init];
    NSArray *array = @[p1, p2];
    NSArray *cpyArray = [array copy];
    NSLog(@"%@ - %@", array, cpyArray);
    // 输出结果
    (
        "<Person: 0x100204af0>",
        "<Person: 0x100206b20>"
    ) - (
        "<Person: 0x100207910>",
        "<Person: 0x1002074d0>"
    )
    
    

    相关文章

      网友评论

          本文标题:不完全深拷贝要实现完全深拷贝

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