我有从Parent类继承的类Child。我想要的是向子节点发送消息,该节点具有该消息的实现。所以这就像从父级调用纯虚函数。如果我现在从Parent发送消息,我将收到警告,父母可能不会回复此消息。确实如此,因为只有Child才能实现它。
基本上,Parent会检测一些操作,例如点击取消按钮,但每个孩子都有自己的取消消息实现,所以我想从父onCancel
打电话让他们完成工作。
无法相信使用继承我仍然需要使用委托......
答案 0 :(得分:4)
是否在运行时检查方法是否存在。因此,即使编译器警告您,代码仍然可以成功。但请始终检查self
是否确实首先定义了该方法。
if ([self respondsToSelector:@selector(onCancel)]) {
[self onCancel];
}
如果您想消除警告,请使用-performSelector:
。
if ([self respondsToSelector:@selector(onCancel)]) {
[self performSelector:@selector(onCancel)];
}
答案 1 :(得分:1)
除非是那个不理解你问题的人。
如果父级和子级都实现了一些onCancel
代码,为什么不在子级[super onCancel]
内调用onCancel
,这将在子代码执行之前执行。
答案 2 :(得分:0)
继承不会消除委托的必要性。这些是OOP的互斥方面。听起来好像你确实试图实现一个委托人。它委托给它的类不应该是它的子类,而是离散类。你需要的是成分,而不是遗产。