Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是";“继电器”;委托协议在Objective-C中的错误实践?_Objective C_Delegates_Protocols - Fatal编程技术网

是";“继电器”;委托协议在Objective-C中的错误实践?

是";“继电器”;委托协议在Objective-C中的错误实践?,objective-c,delegates,protocols,Objective C,Delegates,Protocols,假设我在Objective-C中有三个自定义对象:ClassA:UIViewController,ClassB:NSObject,ClassC:NSObject。ClassA是UIViewController的一个子类,它将显示一个活动指示器,直到ClassC中发生某个网络事件。ClassB在其他类中有一个ClassC,负责将事件从ClassC传递到ClassA。ClassA有一个ClassB,ClassB有一个ClassC,从ClassA到ClassC没有直接连接 现在让我们假设,一旦特定的网

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

现在让我们假设,一旦特定的网络事件发生在ClassC中,ClassC将触发
-(void)someAction。ClassB符合ClassC委托协议,其
-(void)ClassC:(ClassC*)ClassC未执行某些操作方法。反过来,ClassB触发
-(void)这个其他操作,并且由于ClassA符合ClassB委托协议,其
-(void)ClassB:(ClassB*)ClassB未执行该其他操作,它有效地从ClassC检索网络事件


我的问题是,这是一种糟糕的做法吗?如果是的话,有没有更简单的方法来弥合ClassA和ClassC之间的差距?我不太愿意使用NSNotification,因为我认为委托协议更优雅。然而,在我看来,这有点像一场接力赛。我希望在这样的场景中提供有关流行约定的任何信息 委托-当一个项目对其有关系的另一个项目的结果感兴趣或向其提供服务时使用

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


这不是百分之百的难和快。您可以创建一个可以回调多个观察者的委托。您还可以在类之间传递一个块,让其他对象负责委托回调。但是,您的情况似乎更适合通过通知来处理。

您似乎在描述或。您也可能有代码气味。这实际上取决于您想要实现的目标。

在您能够遵循自己的代码之前,这是可以的–但是如果您希望避免创建长链,本地通知仍然会在这里为您提供。这很有意义,我将使用通知,看看它是如何运行的