# 22、理解NSCoping协议

`Foundation`框架中的所有`collection`类在默认情况下都执行浅拷贝，即只拷贝容器对象本身，而不复制其中数据。（主要是因为：容器里的对象未必都能拷贝，而且调用者尾部想在拷贝容器时一并拷贝其中的每个对象）

​ 另外，不要假定遵从了`NSCopying`协议的对象都会执行深拷贝。在绝大多数情况下执行的都是浅拷贝。如果需要在某个对象上执行深拷贝，那么除非该类的文档说它是用深拷贝来实现的`NSCopying`协议，否则：要么寻找能够指向深拷贝的相关方法，要么自己编写方法实现。

要点：

* 若想令自定义的对象具有拷贝功能，则需实现`NSCopying`协议
* 若自定义对象分为可变版本与不可变版本，则应同事实现`NSCopying`与`NSMutableCopying`协议
* 复制对象时需决定采用`浅拷贝`还是`深拷贝`，一般情况下应尽量执行浅拷贝
* 若自定义对象需要深拷贝，那么可考虑新增一个专门执行深拷贝的方法，如`deepCopy`
