为什么每次我们尝试向一个可能不响应消息/选择器的对象发送消息时,都要手动检查这一点?为什么语言不能在每次发送消息或调用performSelector:或此消息的变体时为我们执行检查。这将消除由于发送无效消息而导致的所有崩溃。
这样做效率会不会太低?
发布于 2013-05-21 14:28:28
有几个很好的理由说明为什么每个方法调用都没有内置的检查。首先,它的效率会非常低。但更重要的是,在大多数情况下,您应该只调用已知的方法,因此不需要进行检查。
但是,我们想要在运行时检查的原因有很多。具有可选方法的协议是最好的情况。使用不同版本的API是另一个常见原因。随着时间的推移,新的方法会被添加或删除。
我们需要能够区分错误和知道我们调用的方法可能存在也可能不存在之间的区别。当它是一个错误时,我们想要失败和异常。当一个方法是可选的时,我们需要执行运行时检查,以便在该方法不存在时跳过该调用。
https://stackoverflow.com/questions/16663384
复制相似问题