【问题标题】:Is there a difference between delegate/selector and target/action?委托/选择器和目标/动作之间有区别吗?
【发布时间】:2009-06-14 04:45:45
【问题描述】:

在编写 Cocoa 并实现一个接受委托和一个或多个选择器用于其回调的类方法时,术语是否从“委托”和“选择器”更改为“目标”和“动作”?更重要的是,“代表”是否仅限于当我的班级被调用时,而不是当我的班级进行调用时?

【问题讨论】:

    标签: objective-c cocoa cocoa-touch macos


    【解决方案1】:

    委托通常使用Protocols 而不是选择器来实现。这是一种更正式的跨类通信方式,并且在可能需要多个方法时非常有用。

    Target/Action 一般用于对应“类事件”的情况,比如点击、定时器触发等。

    【讨论】:

    • 我现在明白了——我做错了。这就是为什么它让我感到困惑:) 这个页面也提供了帮助,涵盖了我几乎立即遇到的“方法名不在协议中”错误:mobileorchard.com/…
    【解决方案2】:

    为了详细说明 NilObject 的答案,委托是通过具有一系列“标准化”方法的协议实现的。如果您有多个对象,每个相同的类共享相同的委托,您将无法区分发送者。因此你看到 -(void)delegateCallback:(id)sender 发送者的指针允许你建立这个关联。
    为了进行这种比较,将需要对 sender 的引用作为属性或全局变量,如果您手动释放对象,这也会使您更容易,因为您可以在释放之前将对象属性设置为 nil(以防止垃圾指针)。

    或者,您可以使用选择器方法传入自己的回调方法,这种技术很好,因为您不需要参考来与 :(id)sender 进行比较,并且您可以为每个方法回调您初始化的对象。另一方面,缺少引用意味着如果您释放此对象,您将无法将属性设置为 nil。

    【讨论】:

      【解决方案3】:

      我认为在设计层面存在差异。

      让我们用一个专门做一些事情的组件。 DelegationtargetAction 都会促进我们的组件和使用它的对象之间的(某种形式的)通信。

      通常,所需的通信形式定义是使用Target Action 还是Delegation

      1.传达了什么?

      Target Action 更适用于通信仅限于控制(事件、状态等)的情况

      委托更加灵活,应用广泛。所以我可以使用委托在 2 个对象之间发送和接收 数据

      2。如何

      到目前为止,我已经看到 Target Action 主要体现 1-Way 通信

      通过委托,我自己通过返回值的方法完成了 2-Way 通信。

      【讨论】:

        【解决方案4】:
        Target - 将对您的操作做出响应的对象。
        Action - 由您的操作触发的方法
        Delegates - 主要用于回调机制,使用“@protocols”实现。
        选择器 - 也可以用作回调方法:

        例如:

        SEL mySelector = @selector(myTimerCallback:);
            [NSTimer scheduledTimerWithTimeInterval:30.0 target:obj selector:mySelector userInfo:nil repeats:YES];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多