以下是对
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
自己决定以达到最好的效果。