ma1*_*w28 27 null objective-c nsobject respondstoselector
我见过代码如下:
if (delegate != nil && [delegate respondsToSelector:@selector(doSomething)]) ...
Run Code Online (Sandbox Code Playgroud)
但是,发送消息nil
只返回nil
(评估为NO
),所以为什么不这样做:
if ([delegate respondsToSelector:@selector(doSomething)]) ...
Run Code Online (Sandbox Code Playgroud)
如果前者更快delegate == nil
吗?无论哪种方式,我更喜欢后者,因为它的代码更少.
并且,less
比more
.每个Unix专业人员都知道.
Col*_*n S 23
objc_msgSend,用于在Objective-C中发送动态消息的函数立即检查第一个参数(消息接收者)并返回if == nil.因此,nil消息传递的唯一开销是动态链接库函数调用,这比"内部二进制"函数调用稍微昂贵一些.总的来说,一种方法比另一种更有效吗?复合条件语句通常需要额外的分支,因此在不查看编译器生成的代码的情况下,答案是不确定的,但更重要的是分析正在运行的程序.过早优化是一件坏事™,但我祝贺你实际上考虑了效率并质疑诸如此类的"成语".
你是对的.这在Obj-C中是技术上不必要的开销,因为发送到的任何消息都nil
将nil
自动返回.但是,如果您respondsToSelector:
通过首先检查是否忽略了呼叫nil
,那么您将跳过respondsToSelector:
呼叫的开销.所以它会更快,但是多少,我不确定.
归档时间: |
|
查看次数: |
4131 次 |
最近记录: |