为什么respondsToSelector:存在?

时间:2013-05-21 06:19:45

标签: objective-c crash selector performselector

为什么每次我们尝试向可能无法响应消息/选择器的对象发送消息时都必须手动检查?为什么语言不能在每次发送消息时检查我们,或者每次执行performSelector:或者调用此消息的变体。这将消除由于发送无效消息而导致的所有崩溃。

这样做效率太低了吗?

1 个答案:

答案 0 :(得分:3)

为什么每个方法调用都没有内置检查,这有几个很好的理由。首先,它效率很低。但更重要的是,在大多数情况下,您应该只调用已知方法,因此不需要检查。

但是我们确实想要在运行时检查有多种原因。使用可选方法的协议是一个主要案例。使用不同版本的API是另一个常见原因。随着时间的推移,新方法会被添加或删除。

我们需要能够区分错误并知道我们正在调用可能存在或不存在的方法。当它是一个错误时,我们想要失败和异常。当一个方法是可选的时,我们需要进行运行时检查,以便在不存在的情况下可以跳过该调用。