-,浅复制,当我们用copy方法拷贝不可变对象,或者mutableCpoy拷贝可变对象时,为新对象分配了内存空间,对象默认为浅复制,只是复制了指针地址,所有两者还是指向同一个对象,当一个对象值改变时,另一个对象的值会跟着改变。
二,深复制,为原对象复制一份一模一样的新对象,并且相互之前没有影响,
要用到NSCopying协议和NSMutableCopying协议
NSCopying协议:
- (id)copyWithZone:(nullable NSZone *)zone;
NSMutableCopying:
- (id)mutableCopyWithZone:(nullable NSZone *)zone;
@interface person ()<NSCopying,NSMutableCopying>
#pragma mark---NSCopying
-(id)copyWithZone:(NSZone *)zone{
person *newPerson = [[self class] allocWithZone:zone];
newPerson.name = _name;
newPerson.age = _age;
return newPerson;
}
#pragma mark--NSMutableCopying
- (id)mutableCopyWithZone:(nullable NSZone *)zone{
person *newPerson = [[self class] allocWithZone:zone];
newPerson.name = _name;
newPerson.age = _age;
return newPerson;
}
使用:
person *per = [[person alloc] init];
per.name = @"zhangsan";
per.age = 12;
person *new = [per copy];
new.name = @"lisi";
new.age = 13;
per和new占有不同的内存空间,相互没有影响。