深复制与浅复制的理解

-,浅复制,当我们用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占有不同的内存空间,相互没有影响。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值