- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我见过这样的代码:
if (delegate != nil && [delegate respondsToSelector:@selector(doSomething)]) ...
但是,向 nil
发送消息只会返回 nil
(计算结果为 NO
),所以为什么不这样做:
if ([delegate respondsToSelector:@selector(doSomething)]) ...
如果 delegate == nil
,前者是否更快?无论哪种方式,我更喜欢后者,因为它的代码更少。
并且,less
优于 more
。每个 Unix 专家都知道这一点。
最佳答案
objc_msgSend
,在 Objective-C 中用于发送动态消息的函数会立即检查第一个参数(消息接收者)并在它 == nil 时返回。因此,nil 消息传递的唯一开销是动态链接库函数调用,这比“内部二进制”函数调用的成本略高。总的来说,一种方法是否比另一种方法更有效?复合条件语句通常需要额外的分支,因此如果不查看编译器生成的代码是无法确定答案的,但更重要的是分析正在运行的程序。过早的优化是一件坏事™,但我祝贺你真正考虑效率并质疑这样的“惯用语”。
关于Objective-C:为什么在 respondsToSelector: 之前检查 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6479267/
当想要在委托(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 上,方法“
我是一名优秀的程序员,十分优秀!