22、理解NSCoping协议

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

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

要点:

  • 若想令自定义的对象具有拷贝功能,则需实现NSCopying协议

  • 若自定义对象分为可变版本与不可变版本,则应同事实现NSCopyingNSMutableCopying协议

  • 复制对象时需决定采用浅拷贝还是深拷贝,一般情况下应尽量执行浅拷贝

  • 若自定义对象需要深拷贝,那么可考虑新增一个专门执行深拷贝的方法,如deepCopy

Last updated

Was this helpful?