0

我有一个类ClassA定义protocol A继承自protocol B.

@protocol protocolA <protocolB>

-(void)anAddedMethodToTheInheritiedMethod;
@end

@interface ClassA
@property (nonatomic,weak) id <protocolA> myDelegate;
@end

在另一个类(“MyClass”)中,我收到一个符合协议 A 的对象。

@interface MyClass
@property (nonatomic,weak) id <protocolA> myDelegate;
@end

在 MyClass 的实现中,我创建了一个 ClassA 类型的对象

@implementation MyClass

-(void)someMethod
{
  self.myObjectOfTypeA = [ClassA new];
  self.myObjectOfTypeA.delegate = self.myDelegate;
}
@end

当然这是一个错误,因为 self.myDelegate 没有响应

“一个AddedMethodToTheInheritiedMethod”。

为了解决这个问题,我可以将 MyClass 对象设置为 ClassA 的委托,存根所有委托方法,调用 self.myDelegate 到它回答的方法,并回答来自 ClassA 的“添加”委托方法。

但这是很多样板代码,如果原始协议更改,很容易损坏。我确信有一种更清洁的方法可以实现这一目标。

如何才能做到这一点?

4

1 回答 1

0

听起来您想要的是一个充当实现各种协议的其他几个类的代理的类。这个“调度程序”类将接收消息并将它们发送到实际处理它们的实例,类似于代理(只是在它后面隐藏了多个目标)。如果是这种情况,请使用消息转发来减少样板代码的数量 - 不必实现每个协议方法,只需实现消息转发方法并决定将消息转发到哪些对象。如果你的协议随着时间而改变,你不必不断地向你的调度程序类添加方法,因为转发机制会处理这个问题。有关该主题的更多详细信息,我强烈推荐Mike Ash

于 2013-09-16T14:35:57.710 回答