gpt4 book ai didi

objective-c - "relay"委托(delegate)协议(protocol)在 Objective-C 中是不好的做法吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:17:20 25 4
gpt4 key购买 nike

假设我在 Objective-C 中有三个自定义对象:ClassA: UIViewController <ClassBDelegate> , ClassB: NSObject <ClassCDelegate> , ClassC: NSObject . ClassA 是 UIViewController 的子类,它会显示一个事件指示器,直到某个网络事件在 ClassC 中发生。 ClassB 在其他类中有一个 ClassC,负责将事件从 ClassC 中继到 ClassA。 ClassA有ClassB,ClassB有ClassC,ClassA到ClassC没有直连。

现在假设一旦特定网络事件发生在 ClassC 中,ClassC 将触发 - (void)someAction; . ClassB 符合 ClassC 委托(delegate)协议(protocol),其 - (void)classC:(ClassC *)classC didPerformSomeAction;方法被调用。反过来,ClassB 触发 -(void)thisOtherAction; ,并且由于 ClassA 符合 ClassB 委托(delegate)协议(protocol),它的 -(void)classB:(ClassB *)classB didPerformThisOtherAction;被调用,它有效地从 ClassC 检索网络事件。

我的问题是,这是不好的做法吗?如果是,是否有更简单的方法来弥合 ClassA 和 ClassC 之间的差距?我对使用 NSNotification 犹豫不决,因为我认为委托(delegate)协议(protocol)更优雅。然而,这对我来说有点像接力赛。在这种情况下,我将不胜感激有关流行约定的任何信息。

最佳答案

不要认为委托(delegate)比通知更优雅,只考虑它们适用于不同的情况:

委托(delegate) - 当一个项目对另一个项目的结果感兴趣或向与之有关系的另一个项目提供服务时使用

通知 - 当(可能)多个不同的项目对一个(或多个)事件的发生感兴趣时使用,这些事件由与它们可能有或没有关系的其他项目发布

这不是 100% 严格和快速的。您可以创建一个可以回调许多观察者的委托(delegate)。您还可以在类之间传递一个 block ,让其他对象负责委托(delegate)回调。但是,您的情况似乎更适合通过通知来处理。

关于objective-c - "relay"委托(delegate)协议(protocol)在 Objective-C 中是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com