iOS中的多个代表

Chr*_*Lin 20 singleton delegates callback ios

我正在制作一个对象,用于下载所有视图控制器的内容.该对象是单例实例,并且在下载完成后具有带有接收数据的回调方法.它还有一个委托属性,以便在下载完成后知道要回调哪个对象.

有多个控制器使用此共享实例,我的问题是如何回调请求下载的正确视图控制器.

我的方法是使用委托,但问题是,由于其他视图控制器也是它的委托,下载对象可以回调每个对象,这将很难跟踪.

dre*_*kka 45

我曾经在人们试图使用多个代表的项目上工作,这基本上是个坏主意.委托模式是类与其委托之间的1对1关系.虽然可以通过切换代表来实现某种程度的多重委派,但更有可能导致不可预测的行为和错误.

我的建议是改变你对此的看法.我看到你有两个选择:

  1. 切换到Observer模式,您可以在其中注册主类可以与之交互的多个观察者.当观察者都实现相同的协议并且主类想要了解观察者和与他们的交互时,这非常有用.

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

  • 谢谢你的解释.NSNotification为我精心打造. (4认同)

Cha*_*bot 11

实际上听起来像委托模式可能不是最好的方法.

我会调查一下NSNotificationCenter.

基本的想法是,你的网络连接的单身人士发布通知(类似的东西postNotificationName:object:userInfo:),说新数据可用.在此通知中,您可以传递userInfo包含您已获取的数据的字典对象(),或者有关模型的哪些部分包含更新数据的信息.

然后,您的其他视图控制器可以通过调用自己注册以"观察"这些通知addObserver:selector:name:object:.一般来说,当一个vc变得可见时,我会打电话addObserver,removeObserver当它被隐藏或过渡时.

祝好运!