深拷贝与浅拷贝

1.深拷贝与浅拷贝

深拷贝与浅拷贝的区别:

浅拷贝指的是指针,相当于对对象的指针拷贝,这个指针存有这个对象的内存地址,所以就是一个对象有两个指针,那么他的引用计数是2,如果销毁这个对象,那么必须对这两个指针进行置空,要不就成为了野指针了。

深拷贝指的是对象,相当于对对象进行复制一个新的内存地址,并有个新指针指向这块新内存地址。所以说内存中会存在两块大小相同的内存,存放相同的对象,但是地址不同。如果新拷贝的对象被释放,那么对旧对象没任何影响。

要自定义一下copy 需要遵循NSCopying协议,实现- (id)copyWithZone:(NSZone *)zone 方法而发送copy消息,要实现mutableCopy 则需要遵循NSMutableCopying协议,实现- (id)mutableCopyWithZone:(NSZone *)zone 方法而发送mutableCopy消息,如果发送了一个没有遵守上诉两协议而发送 copy或者 mutableCopy,那么就会发生异常。,一般属性property的修饰符copy代替的就是就是前者,在进行赋值操作的时候实际上就是调用这个- (id)copyWithZone:(NSZone *)zone 方法。

那么还有对一个是否可变的对象进行copy、mutableCopy。

那么结论就是:如果对于一个不可变对象的话,copy是浅拷贝,mutableCopy是深拷贝。

 如果对于一个可变对象的话,两者都是深拷贝。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值