检查可选协议方法是否已实现

55

有人知道检查可选协议方法是否已实现的最佳方法吗?

我尝试了这个:

if ([self.delegate respondsToSelector:@selector(optionalProtocolMethod:)] )

delegate是什么:

id<MyProtocol> delegate;

然而,我遇到一个错误,提示协议中没有找到respondsToSelector:函数!

2个回答

101

respondsToSelector:NSObject 协议的一部分。在 MyProtocol 中包含 NSObject 应该可以解决你的问题:

@protocol MyProtocol <NSObject>

@optional
-(void)optionalProtocolMethod:(id)anObject;

@end

3
除非你打算保留你的委托,不然为什么要调用 [delegate release]? - SilverSideDown
1
公平地说,有些情况下必须保留委托对象,这是对grilix公正的评价。 - Mike Weller
@MikeWeller 对保留委托的使用案例很好奇。您有为什么要这样做的任何示例吗? - memmons

5

我所做的是应用以下配方:

if(self.delegate && [self.delegate respondsToSelector:@selector(closed)]){
    [self.delegate closed];
}

我需要调用的方法名称为“closed”。


这是否有些过度了?如果委托不存在。[self.delegate respondsToSelector:@selector(closed)] 将返回 nil。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接