gpt4 book ai didi

Objective-C:为什么在 respondsToSelector: 之前检查 nil?

转载 作者:太空狗 更新时间:2023-10-30 03:10:30 26 4
gpt4 key购买 nike

我见过这样的代码:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com