参考:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html
NSObject 对象 copy 方法调用NSCopying中copyWithZone方法。
实现copyWithZone方法时注意(以下是翻译的原文,本人英语极烂,给位如有不同意见敬请拍砖!):
1 如果当前类没有通过继承实现copyWithZone:.,那么必须在copyWithZone方法中使用alloc 或init...等方法。
2如果当前类通过继承,调用父类中的copyWithZone,实现NSCopying。如果父类实现可能使用NSCopyObject 方法,显示为retained对象安排一个实例指针变量。
3当类和他的内容都是不变的,为了实现NSCopying 通过retaining 初始值,不是创建一个新的copy。
如果一个子类从父类继承NSCopying并且这个子类添加了额外的实例变量,这个子类必须重写copyWithZone:方法,来适当地处理其自有的实例变量,并且首先调用父类的实现方法。
转载于:https://www.cnblogs.com/programmer-blog/archive/2012/04/23/2466669.html