copy与mutableCopy区别

本文探讨了Objective-C中copy与mutableCopy的区别,包括定义、对receiver的不同要求及执行效果。并解释了为何property声明中通常只使用copy特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是对copymutableCopy的一些个人理解,如有不当请多多指正。
定义
 1.copy:不可变复制
 2.mutableCopy:可变复制
receiver的要求不一样
1.copyreceiver必须实现NSCopying协议
2.mutableCopyreceiver必须实现NSMutableCopying协议
执行效果不一样
1.如果receiver是不可变容器
   1copy:返回receiver,并且receiver的引用计数加1,等效于retain
   2mutableCopy:由receiver中的数据构造一个新的可变实例
2.如果receiver是可变容器
   1copy:由receiver中的数据构造一个新的不可变实例
   2mutableCopy:由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自己决定以达到最好的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值