我有一个班级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不响应
“anAddedMethodToTheInheritiedMethod”。
为了解决这个问题,我可以将MyClass对象设置为ClassA的委托,将所有委托方法存根,将self.myDelegate调用到它应答的方法,并回答ClassA中的“添加”委托方法。
但这是很多锅炉板代码,如果原始协议发生变化,容易破损。我确信有更清洁的方法来实现这一目标。
如何做到这一点?
答案 0 :(得分:0)
听起来你想要的是一个类,它作为实现各种协议的其他几个类的代理。这个“调度程序”类将接收消息并将它们发送到实际处理它们的实例,类似于代理(只有隐藏在其后面的多个目标)。如果是这种情况,请使用message forwarding来减少样板代码的数量 - 而不是必须实现每个协议方法,只需实现消息转发方法并确定将消息转发到哪些对象。如果您的协议随时间而变化,您将不必经常向您的调度程序类添加方法,因为转发机制将负责这一点。有关该主题的更多详细信息,我强烈推荐Mike Ash。