objective-c - 为什么respondsToSelector : exist?

标签 objective-c crash selector performselector

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

这样做效率太低了吗?

最佳答案

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

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

我们需要能够区分错误和知道我们正在调用可能存在或可能不存在的方法。当出现错误时,我们希望失败和异常(exception)。当某个方法是可选的时,我们需要进行运行时检查,以便在该方法不存在时跳过该调用。

关于objective-c - 为什么respondsToSelector : exist?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16663384/

相关文章:

ios - 灰色半透明指令是否使用 UIActivityIndi​​cator?

c# - 如何对事件日志中的 .NET 2.0 错误报告消息进行故障排除?

objective-c - UIButton 在 UIScrollView 中不起作用

objective-c - 计算 Objective-C 二进制文件中选择器的数量

ios - 在 ios 中以横向模式显示 iPad 的侧边栏,如 facebook

objective-c - NSPredicate 不适用于字典数组

crash - 当dest为NULL时,memcpy挂起

ios - NSTimer 中的 UserInfo 没有传递正确的信息 - Swift

ios - 编辑包含 NSFetchedResults 的 TableView

c - Linux TCP套接字崩溃