如何在一个类中实现两个相同类型的委托?

时间:2015-10-24 13:07:41

标签: ios objective-c delegates

我正在为这种情况寻找好的模式。让我们上课与代表:

@protocol MyDelegate
-(void) someEvent;
@end

@interface MyServiceClass
@property (nonatomic,weak) id<MyDelegate> delegate;
@end

我们有这个类的两个实例。例如serviceObject1和serviceObject2。现在在我们的控制器中,我们希望从两个实例接收事件:

-(void) registerDelegates {
    serviceObject1.delegate=self;
    serviceObject2.delegate=self;
}

-(void) someEvent {
  // do something
}

除了将来自两个实例的事件抛出到一个someEvent方法之外,一切都很好。对于我来说,将serviceClass1和serviceClass2中的事件分离到不同的方法会更加舒适。

我看到了三种方法,但不喜欢其中任何方法:

  1. 将调用者的实例作为someEvent的参数发送,并检查此事件的实例,并重定向到适当的方法。
  2. 在我的控制器中创建两个假对象,并将它们注册为service1Class的委托。从这个对象中调用我的控制器中的不同方法。
  3. 使用匿名块而不是委托。很好的决定,但我不知道如何取消注册。
  4. 可能存在我错过的另一种解决方案吗?

1 个答案:

答案 0 :(得分:3)

处理方法是将MyServiceClass实例作为方法参数之一传递,基本上就是你为#1编写的内容。

Apple是如何做到这一点的,以及它的标准做法。

@protocol MyDelegate
-(void) someEventFromService:(MyServiceClass *serviceClass);
@end