iOS 关于深copy和浅copy的一些误区

题记:
请问property里面的copy是深copy还是浅copy?

面对上面的这个问题,你先的理解什么是深copy和浅copy,参考以下的图说明:
在这里插入图片描述
我们创建了一个对象A,然后指针P1指向了对象A,这时候进行了浅copy,简单说就是把指针P2直接指向了对象A,而进行深copy之后又创新创建了对象B,同时新的指针指向了对象B。

总结上面就是,浅copy就是指针的copy,深copy就是指针和对象的copy

那我们在property里面用的copy到底是哪一种copy方式?这主要看你copy的内容,如果是对一个NSAraay\NSDictionary\NSString类型的copy那简单说就是浅copy,因为他们本质是不变的,你这时候做copy其实就是把指针指向对应的内存控件。

但是当你copy的是mul系列可变的时候就不一样了,因为mul对象本质存储的内容是在堆里面,这时候你copy实际上是做了一次深copy,copy完之后你得指针指向的内容变成了不可变的,所以对象本身也被copy了一份。

参考下表

源对象类型源对象类型副本对象类型是否产生新对象拷贝类型
NS*copyNS*浅拷贝
NS*mutableCopyNSMutable*深拷贝
NSMutable*copyNS*深拷贝
NSMutable*mutableCopyNSMutable*深拷贝

总结:
property里面的copy根据实际情况确定具体是深copy还是浅copy

水平有限,分析有可能局限,如有问题可以指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值