使用目标c中的类别私下扩展协议

时间:2011-03-14 17:17:11

标签: objective-c delegates protocols

进行了一些搜索,并没有找到太多,但想知道是否可以扩展协议。

目前,在MyDelegate.h中,有:

@protocol MyDelegate <NSObject>

希望创建一个私有标头MyDelegate + Private.h,以便不向客户端公开额外的可选方法。

@protocol MyDelegate (Private) <NSObject>

这似乎不起作用。可能吗?我希望避免创建一个包含当前代表的超集的全新委托协议。

1 个答案:

答案 0 :(得分:4)

我认为您无法在协议上创建类别,但您可以使用协议创建协议并将其保存在私有标头中。 Apple在其框架中经常这样做。

@protocol MyDelegate_Private <MyDelegate>
- (void)myRequiredPrivateMethod;
@optional
- (void)myOptionalPrivateMethod;
@end

然后在声明类时指定此协议。要隐藏存在私有协议的事实,请使用公共标头声明该类实现公共协议和私有标头,声明它实现私有协议。

此外,如果您只在协议中使用可选方法,则实际上并不需要制定协议。它所做的就是指定可​​以实现的方法列表,因为它只是私有地使用而不是必需的。你可以说这个类实现了公共协议,并且“刚刚发生”也实现了接口中没有包含的其他方法。