2

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

这样做是不是太低效了?

4

1 回答 1

3

每个方法调用都没有内置检查有几个很好的理由。首先,这将是非常低效的。但更重要的是,在大多数情况下,您应该只调用已知方法,因此无需进行检查。

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

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

于 2013-05-21T06:28:27.987 回答