为啥委托中需要一些方法?

Posted

技术标签:

【中文标题】为啥委托中需要一些方法?【英文标题】:Why some methods are required in delegates?为什么委托中需要一些方法? 【发布时间】:2010-08-18 14:36:14 【问题描述】:

我很好奇 - 为什么UITextInputDelegate 需要所有方法?为什么我不能只实现我想要的(例如textDidChange)?

【问题讨论】:

【参考方案1】:

这可能是一个性能问题。这些方法被频繁调用,每次发生任何变化时都必须发送-respondsToSelector: 对性能造成很大影响。

【讨论】:

可以,但您不必在每次通话时都调用 respondsToSelector。您只能在委托更改时检查。这甚至可能更快,因为你只比较一个布尔值,我认为它比调用空方法更快。 所以谜团仍然存在 :) 我同意这个答案,因为它听起来很合理。 谢谢梅林。需要明确的是,答案只是猜测。我没有来自 Apple 的任何秘密信息。【参考方案2】:

你不能只为你不需要的三个方法做空函数吗?

【讨论】:

我可以而且我可以,我只是好奇为什么我必须这样做:)【参考方案3】:

对我来说,似乎有些苹果工程师懒得正确编程委托调用。所以他只是没有设置@optional,所以他不必处理可能不存在的方法。

【讨论】:

如果是这种情况,我相信 Apple 会修复它,毕竟将代表更改为可选不会破坏现有代码。 那么当您现有的代码调用未实现的可选方法时会发生什么?它会崩溃!您必须检查可选方法是否存在。您不必对所需的方法执行此操作! (见@JeremyP 的论点) 是的,但我认为懒惰与此无关。 是的,是的,也许他们有一些理由这样做。谁知道呢。

以上是关于为啥委托中需要一些方法?的主要内容,如果未能解决你的问题,请参考以下文章

为啥委托方法需要将自定义类托管对象上下文的内容保存在委托类托管对象上下文中?

为啥需要在一个视图控制器中使用委托? [关闭]

为啥我们需要回调事件?

为啥我的循环中的异步委托没有等待

清除事件所有委托方法

为啥没有调用 FLogin 按钮委托方法?