iPhone - 我如何知道协议方法是否已实施?

时间:2011-01-23 21:59:41

标签: iphone class

我创建了一个类,这个类有自己的委托协议。 在该协议中,有一个可选方法,声明为

@protocol myClassDelegate <NSObject>
@optional
- (void) myOptionalMethod;

@end

在课程内部,我以

的形式调用myOptionalMethod
[delegate myOptionalMethod];

但由于该方法是可选的,如果我在未实现该方法的委托上调用此方法,则会崩溃。

那么,如何在调用之前测试该方法是否已实现?

感谢。

3 个答案:

答案 0 :(得分:2)

在调用委托上的选择器之前,您应该使用respondsToSelector方法来确定委托是否具有相关方法。

例如:

if([delegate respondsToSelector:@selector(myOptionalMethod)]) {
    [delegate myOptionalMethod];
}

答案 1 :(得分:2)

这很简单。

if([delegate respondsToSelector:myOptionalMethod]){
    // You can now call this method without a crash
    [delegate myOptionalMethod];
}

答案 2 :(得分:2)

-respondsToSelector:对于个别方法非常有用,正如其他人在此处发布的那样。要获得更严格的解释,您可以查看某个类是否被声明为使用-conformsToProtocol:方法实现协议:

BOOL isAGrommet = [myObject conformsToProtocol: @protocol(Grommet)];