首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone -如何知道是否实现了协议方法?

iPhone -如何知道是否实现了协议方法?
EN

Stack Overflow用户
提问于 2011-01-24 05:59:41
回答 3查看 394关注 0票数 1

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

代码语言:javascript
复制
@protocol myClassDelegate <NSObject>
@optional
- (void) myOptionalMethod;

@end

在类中,我有一个对myOptionalMethod的调用,其形式为

代码语言:javascript
复制
[delegate myOptionalMethod];

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

那么,如何在调用该方法之前进行测试,以确定该方法是否已实现呢?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-24 06:02:48

这很简单。

代码语言:javascript
复制
if([delegate respondsToSelector:myOptionalMethod]){
    // You can now call this method without a crash
    [delegate myOptionalMethod];
}
票数 2
EN

Stack Overflow用户

发布于 2011-01-24 06:02:00

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

例如:

代码语言:javascript
复制
if([delegate respondsToSelector:@selector(myOptionalMethod)]) {
    [delegate myOptionalMethod];
}
票数 2
EN

Stack Overflow用户

发布于 2011-01-24 06:14:23

正如其他人在这里发布的那样,-respondsToSelector:对于单独的方法很有用。对于更严格的解释,您可以查看类是否被声明为使用-conformsToProtocol:方法实现协议:

代码语言:javascript
复制
BOOL isAGrommet = [myObject conformsToProtocol: @protocol(Grommet)];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4776836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档