从父母发送消息给孩子

时间:2010-07-28 10:25:08

标签: objective-c inheritance

我有从Parent类继承的类Child。我想要的是向子节点发送消息,该节点具有该消息的实现。所以这就像从父级调用纯虚函数。如果我现在从Parent发送消息,我将收到警告,父母可能不会回复此消息。确实如此,因为只有Child才能实现它。

基本上,Parent会检测一些操作,例如点击取消按钮,但每个孩子都有自己的取消消息实现,所以我想从父onCancel打电话让他们完成工作。

无法相信使用继承我仍然需要使用委托......

3 个答案:

答案 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的互斥方面。听起来好像你确实试图实现一个委托人。它委托给它的类不应该是它的子类,而是离散类。你需要的是成分,而不是遗产。