我正在制作一个对象,用于为我的所有 View Controller 下载内容。该对象是单例实例,并且在下载完成后具有接收到的数据的回调方法。它还具有委托(delegate)属性,因此它知道在下载完成后要回调哪个对象。
有多个 Controller 使用这个共享实例,我的问题是如何回调到请求下载的正确 View Controller 。
我的方法是使用委托(delegate),但问题是由于其他 View Controller 也是它的委托(delegate),下载对象可以回调每个对象,这将很难跟踪。
最佳答案
我曾参与过人们尝试使用多个委托(delegate)的项目,这基本上是个坏主意。委托(delegate)模式是类和它的委托(delegate)之间一对一的关系。虽然通过切换委托(delegate)和切换委托(delegate)可以实现某种程度的多重委托(delegate),但这更有可能导致不可预测的行为和错误。
我的建议是改变您对此的看法。在我看来,您有两个选择:
切换到观察者模式,您可以在其中注册多个观察者,您的主类可以与之交互。这在您的观察者都实现相同协议(protocol)以及您的主类想要了解观察者并与他们交互的情况下很有用。
广播 NSNotifications 以指示状态变化和事件。这是一种更解耦的方法,因为主类不需要知道谁在听,也不直接与他们交互。其他人可以在闲暇时开始和停止收到通知。它还具有您不需要创建或实现单独的协议(protocol)的优点。相反,您需要使用 NSNotificationCenter 注册需要了解更改的类,而 NSNotificationCenter 又会为您处理所有通知路由。
关于ios - iOS 中的多个委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774808/