【发布时间】:2012-02-14 16:18:17
【问题描述】:
我对查看 Apple 的文档和阅读 Cocoa 设计模式感到困惑。在copyWithZone: 的 Apple 文档中,内容如下:
此方法存在,因此类对象可以在以下情况下使用 你需要一个符合 NSCopying 协议的对象。为了 例如,此方法允许您使用类对象作为 NSDictionary 对象。你不应该重写这个方法。
copy 的内容如下:
对于采用 NSCopying 的类来说,这是一种方便的方法 协议。如果没有实现,则会引发异常 复制带区:。
NSObject 本身不支持 NSCopying 协议。子类 必须支持协议并实现 copyWithZone: 方法。一种 copyWithZone: 方法的子类版本应该发送消息 to super first, 合并它的实现,除非子类 直接从 NSObject 继承。
在 Cocoa 设计模式的示例中,它们覆盖 copyWithZone: 和 mutableCopyWithZone:,但在符合 NSCopying 协议时不会覆盖 copy。如果我想在NSDictionary 中使用我的自定义子类作为键,我应该这样做吗?
或者我是否覆盖copy?
同样,如果我使用[myClass copy],是否会为我的自定义子类调用copyWithZone: 或copy?谢谢。
【问题讨论】: