- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当想要在委托(delegate)对象上调用协议(protocol)方法时,希望实现相应的协议(protocol)方法,我看到开发人员首先检查
if([delegate respondsToSelector: @selector(aMethod)])
{
//send message;
}
这样做不是更好甚至更安全吗? :
if([delegate conformsToProtocol:@protocol(MyProtocol)] && [delegate respondsToSelector: @selector(aMethod)])
{
//send message;
}
我知道,如果协议(protocol)方法定义的结构正确,那么在委托(delegate)中永远不会有任何冲突或实现可能不是为 MyProtocol 设计的/来自 MyProtocol。这种冲突是牵强附会的,但我遇到了一个简单声明为 -(void)willStartLogin; 的协议(protocol)方法定义。我确定您已经可以开始思考并提出这样的协议(protocol)方法有多么糟糕,例如,它可能已经由委托(delegate)实现以供个人/内部使用,而不是在 myDelegate 协议(protocol)下使用。最好这样声明 MyProtocol 的方法: -(void)myObjectWillStartLogin:(MyObject*)myObjectInstance;以消除任何歧义并使事情变得显而易见。
我希望我没有遗漏任何只需要检查 respondsToSelector 的东西:谢谢
最佳答案
我不太确定你在问什么,但也许这会有所帮助:
协议(protocol)是方法的集合,有些是必需的,有些是可选的。 conformsToProtocol:
回答的问题是一个对象是否声称 实现了一堆方法——必需的——并且可以实现其他一些——可选的。请注意,这里是声明,而不是确实,因为未能实现所需的方法不会阻止编译(这只是一个警告)。
respondsToSelector:
回答的问题是一个对象是否实现了一个特定的方法。与 conformsToProtocol:
不同,这为该特定方法提供了明确的答案。
respondsToSelector:
的确定性是它被广泛使用的原因。
您可能认为除了方法之外还检查协议(protocol)会更好,因为这意味着该方法更有可能按照您的预期执行,如果是这样,则同时使用 respondsToSelector:
和 conformsToProtocol:
告诉您您寻求的答案...有点像 - 因为协议(protocol)实际上只是方法名称和签名,这些方法的行为是隐含的而不是强制执行的 (*)。
HTH.
(* 如果你想强制执行契约(Contract),请查看,例如 Eiffel)
关于objective-c - ( 符合协议(protocol) : && RespondsToSelector: ) vs just ( respondsToSelector: ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20389465/
当想要在委托(delegate)对象上调用协议(protocol)方法时,希望实现相应的协议(protocol)方法,我看到开发人员首先检查 if([delegate respondsToSelect
我试图实现 swift 的替代 respondsToSelector: 语法,该语法也显示在主题演讲中。 我有以下内容: protocol CustomItemTableViewCellDelegat
我目前正在使用 -respondsToSelector:,如下所示: if (![moviePlayer respondsToSelector:@selector(currentPlaybackTim
我正在编写自己的 gridview 实现(基于 tableview 模式)。我遵循了类似于 TableView 的数据源模型,但是当我检查数据源是否响应消息时,调用总是失败。 我已经尝试放置断点并在执
据我所知 respondsToSelector: 是 NSObject Protocol 的一个方法,但是对于协议(protocol)中的所有方法,符合该协议(protocol)的类需要提供实现,但我
在 UIViewController 的一个简单子(monad)类中,我只是实现了一个选择器作为刷新 UI 的回调 -(void)afterfollowAction:(id)object{ //b
假设我们有不同的对象,它们具有相同的方法名称但具有不同的参数类型,例如:getMethod:(NSNumber*)aNumber 和 getMethod:(NSString*)aString . 如何
如果我向 NSXML Parser 发送错误的 URL,我会尝试找出我的应用程序崩溃(RSS 阅读器)的原因。我有一个 EXC_BAD_ACCESS。因此,经过一番搜索后,我发现我必须使用 Zombi
是否有来自 Objective C 的 respondsToSelector: 方法的 Android 模拟? 最佳答案 在 Java 中,您通常期望在定义方法的地方有一些接口(interface)。
我正在按照苹果的示例代码来了解如何在 iOS 7 下实现收据验证,并且它有效,除非我在 iOS 6 下运行以下代码(基本上逐字地从他们的示例中获取) NSBundle *bundle =[NSBund
我用respondsToSelector检查的方法是否必须实际存在? 如果我只在接口(interface)部分定义而没有实现怎么办?我正在研究 Objective-C 中的穷人虚拟函数。 最佳答案 首
以下行编译正常但在 iOS 8 中错误地返回 false。为什么? [[NSLayoutConstraint class] respondsToSelector:@selector(setActive
如果类响应选择器,我正在寻找以动态方式检查的可能性。 例如,我在类中有一个严格的方法名称模式,如“parse[CountryCode]Adress”。 我尝试过这样的事情: SEL selector
我试图通过在 [UIBarButtonItem appearance] 上运行 respondsToSelector 来检测特定于 iOS 6 的外观方法。但是,无论我指定什么选择器,它总是为我返回
有没有等价于-respondsToSelector:的类方法? 类似于 +respondsToSelector:? 我问的原因是因为通过在类级别实现 -respondsToSelector:,我收到编
我已经实现了一个带有可选方法的协议(protocol),并且在我想发送的调用方法中 respondsToSelector:至self.delegate在我发送消息之前,但这不会编译。失败消息是: 选择
在内部,respondsToSelector 是否不仅仅是找出 class_getInstanceMethod 是否返回非零值? respondsToSelector 本质上是 class_getIn
在内部,respondsToSelector 是否不仅仅是找出 class_getInstanceMethod 是否返回非零值? respondsToSelector 本质上是 class_getIn
我正在转换 this Swift 的 Objective-C 开源项目。它有一堆可选的代表。 @protocol BEMAnalogClockDelegate @optional - (void)c
NSObject 的“响应”方法似乎在最新版本的 Xcode 9 Beta 4、Swift 4.0 版中被破坏。 下面是在 Xcode 8 上测试的示例代码(工作正常),在 Xcode 9 上,方法“
我是一名优秀的程序员,十分优秀!