ios - iOS 中的多个委托(delegate)

标签 ios delegates callback singleton

我正在制作一个对象,用于为我的所有 View Controller 下载内容。该对象是单例实例,并且在下载完成后具有接收到的数据的回调方法。它还具有委托(delegate)属性,因此它知道在下载完成后要回调哪个对象。

有多个 Controller 使用这个共享实例,我的问题是如何回调到请求下载的正确 View Controller 。

我的方法是使用委托(delegate),但问题是由于其他 View Controller 也是它的委托(delegate),下载对象可以回调每个对象,这将很难跟踪。

最佳答案

我曾参与过人们尝试使用多个委托(delegate)的项目,这基本上是个坏主意。委托(delegate)模式是类和它的委托(delegate)之间一对一的关系。虽然通过切换委托(delegate)和切换委托(delegate)可以实现某种程度的多重委托(delegate),但这更有可能导致不可预测的行为和错误。

我的建议是改变您对此的看法。在我看来,您有两个选择:

  1. 切换到观察者模式,您可以在其中注册多个观察者,您的主类可以与之交互。这在您的观察者都实现相同协议(protocol)以及您的主类想要了解观察者并与他们交互的情况下很有用。

  2. 广播 NSNotifications 以指示状态变化和事件。这是一种更解耦的方法,因为主类不需要知道谁在听,也不直接与他们交互。其他人可以在闲暇时开始和停止收到通知。它还具有您不需要创建或实现单独的协议(protocol)的优点。相反,您需要使用 NSNotificationCenter 注册需要了解更改的类,而 NSNotificationCenter 又会为您处理所有通知路由。

关于ios - iOS 中的多个委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774808/

相关文章:

c++ - 回调函数和常规函数有什么区别?

ios - 参数标签 '(MDLObject:)' 与 Xcode 10 中的任何可用重载不匹配

ios - 两个按钮的背景颜色都改变了

C# - 从工作线程而不是主线程访问时,类字段为空

delegates - C# : this. 调用((MethodInvoker)委托(delegate)

c# - c#中的回调,调用顺序和返回

ios - Swift: fatal error :在初始化 UIlabel 值时展开可选值时意外发现 nil

iOS - 从其他类重新加载表中的数据

ios - 从 Swift 中的另一个类刷新 UITableView

c++ - 如何将数组的内容插入 vector 中?