objective-c - Objective C 是否支持协议(protocol)的私有(private)继承

标签 objective-c objective-c-category

协议(protocol)是否可以私有(private)继承,以便在下一个继承级别中不应访问该协议(protocol)?

最佳答案

Objective-C 没有像 C++ 那样的“私有(private)继承”(或“私有(private)一致性”)。

您可以遵守协议(protocol),而无需在头文件中声明您的一致性。例如,如果您将其放在 .m 文件中的 @implementation 语句之上,则可以“ secret 地”遵守 NSCoding:

@interface MyObject () <NSCoding>
@end

它声明了一个类扩展,它将NSCoding协议(protocol)添加到MyObject类中。

但是,任何人(包括子类)都可以询问您是否采用该协议(protocol):

[[MyObject class] conformsToProtocol:@protocol(NSCoding)]
// returns YES

[[MySubObject class] conformsToProtocol:@protocol(NSCoding)]
// also returns YES, if MySubObject is a subclass of MyObject

任何人都可以通过先转换对象来向 MyObject 发送 NSCoding 消息:

[(id<NSCoding>)someObject encodeWithCoder:someCoder]

如果你创建了MyObject的子类,并且你的子类也声明它符合NSCoding,那么它几乎肯定需要调用[superencodeWithCoder :] 来自它自己的 encodeWithCoder: 方法。

关于objective-c - Objective C 是否支持协议(protocol)的私有(private)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11859398/

相关文章:

objective-c - NSButton 中的图像未显示?

ios - 错误 ITMS-9000 : invalid bundle. xyz.app 中的 bundle 不包含 bundle 可执行文件

iphone - iOS 7 UItableview 单元格背景 View

ios - objective-c : how to inherit category methods loaded in a parent class?

objective-c - 协议(protocol)和警告类别 "class does not implement protocol"

ios - 覆盖 UITextField getter-setter

objective-c - 这是一个明智的 Objective-C block 实现吗?

ios - 如何向 MKMapView 添加宽半径注释?

objective-c - 停止 NSApplication 主事件循环

ios - 使用类别中的 block 扩展 UIRefreshControl