【问题标题】:Sending message to child from parent从父母发送消息给孩子
【发布时间】:2010-07-28 10:25:08
【问题描述】:

我的 Child 类继承自 Parent 类。我想要的是向孩子发送消息,它具有该消息的实现。所以这就像从父级调用纯虚函数一样。如果我现在从家长那里发送消息,我会收到警告,家长可能不会回复此消息。这是真的,因为只有 Child 有它的实现。

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

不敢相信使用继承我仍然必须使用委托......

【问题讨论】:

    标签: objective-c inheritance


    【解决方案1】:

    在运行时检查方法是否存在。因此,即使编译器警告您,代码仍然可以成功。但请务必先检查 self 是否真的定义了该方法。

    if ([self respondsToSelector:@selector(onCancel)]) {
      [self onCancel];
    }
    

    如果要消除警告,请使用-performSelector:

    if ([self respondsToSelector:@selector(onCancel)]) {
      [self performSelector:@selector(onCancel)];
    }
    

    【讨论】:

    • 您可以通过将 self 转换为类型 id 来消除警告,这将比使用 performSelector 稍微快一点:
    【解决方案2】:

    除非是不了解您的问题的人。 如果父母和孩子都实现了一些onCancel代码,为什么不在孩子onCancel内部调用[super onCancel],这将在孩子的代码执行之前执行。

    【讨论】:

      【解决方案3】:

      继承并没有消除委派的需要。这些是 OOP 的相互排斥的方面。在我看来,您确实在尝试实施委托人。它委托给的类不应该是它的子类,而是离散类。这里需要的是组合,而不是继承。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-03
        • 1970-01-01
        • 1970-01-01
        • 2015-09-14
        • 2020-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多