深复制与浅复制的理解

来源:互联网 发布:java 余弦相似度算法 编辑:程序博客网 时间:2024/05/16 15:16

-,浅复制,当我们用copy方法拷贝不可变对象,或者mutableCpoy拷贝可变对象时,为新对象分配了内存空间,对象默认为浅复制,只是复制了指针地址,所有两者还是指向同一个对象,当一个对象值改变时,另一个对象的值会跟着改变。

二,深复制,为原对象复制一份一模一样的新对象,并且相互之前没有影响,

要用到NSCopying协议和NSMutableCopying协议

NSCopying协议:

- (id)copyWithZone:(nullableNSZone *)zone;


NSMutableCopying:

- (id)mutableCopyWithZone:(nullableNSZone *)zone;


分别用来实现不可变对象的拷贝和可变对象的拷贝,要实现自己类的拷贝就要实现协议的方法

@interface person ()<NSCopying,NSMutableCopying>


#pragma mark---NSCopying

-(id)copyWithZone:(NSZone *)zone{

    

    person *newPerson = [[selfclass] allocWithZone:zone];

    newPerson.name =_name;

    newPerson.age =_age;

    return newPerson;

    

}

#pragma mark--NSMutableCopying

- (id)mutableCopyWithZone:(nullableNSZone *)zone{

    

    person *newPerson = [[selfclass] allocWithZone:zone];

    newPerson.name =_name;

    newPerson.age =_age;

    return newPerson;

    

}

使用:

 person *per = [[personalloc] init];

    per.name =@"zhangsan";

    per.age =12;

    

    person *new = [percopy];

    new.name =@"lisi";

    new.age =13;

    

per和new占有不同的内存空间,相互没有影响。
0 0