copy与mutableCopy区别

以下是对 copy mutableCopy 的一些个人理解,如有不当请多多指正。
定义
 1.copy :不可变复制
 2.mutableCopy :可变复制
receiver 的要求不一样
1.copy receiver 必须实现 NSCopying 协议
2.mutableCopy receiver 必须实现 NSMutableCopying 协议
执行效果不一样
1. 如果 receiver 是不可变容器
   1 copy :返回 receiver ,并且 receiver 的引用计数加 1 ,等效于 retain
   2 mutableCopy :由 receiver 中的数据构造一个新的可变实例
2. 如果 receiver 是可变容器
   1 copy :由 receiver 中的数据构造一个新的不可变实例
   2 mutableCopy :由 receiver 中的数据构造一个新的可变实例
3. 原因
为什么 SDK 对不同类型的 receiver 会产生如此多种结果。主要考虑以下方面
  1 )达到定义要求的效果。(参考上面定义中的描述)
  2 )尽量节省资源开销。
基于这第 2 )点。所以当 receiver 是不可变容器的时候,接收到 copy 消息时。只要达到 retain 的效果就可以了。这样一方面可以满足定义的要求,另一主面可以节省资源。
4. 特定应用
1 )为什么 property 声明中只有 “copy” 特性而没有 “mutableCopy” 特性。这是由于当声明 property "copy" 特性时,系统会自动根据 receiver 的特点决定使用 copy (已含 retain 的情况)还是 mutableCopy
2 )所以对于容器类的 property 特性一般使用“ copy ”而不使用“ retain ”,交由系统根据 receiver 自己决定以达到最好的效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值