代码之家  ›  专栏  ›  技术社区  ›  Collin Allen

委托/选择者和目标/行动之间有区别吗?

  •  7
  • Collin Allen  · 技术社区  · 16 年前

    当编写cocoa并实现一个接受委托和一个或多个选择器用于回调的类方法时,术语是否从“委托”和“选择器”更改为“目标”和“操作”?更重要的是,“代表”仅限于当我的班级是一个 打电话 但当我的课 打电话 ?

    4 回复  |  直到 8 年前
        1
  •  13
  •   Konamiman    16 年前

    委托通常使用 Protocols 而不是选择器。这是一种更为正式的跨类通信方式,当可能需要多个方法时,它最有用。

    目标/动作通常用于对应“类似事件”的情况,如单击、计时器触发等。

        2
  •  3
  •   Ospho    12 年前

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

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

        3
  •  1
  •   geekay    8 年前

    我认为在设计水平上有区别。

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

    通常,需要哪种沟通形式来定义是否使用 Target Action 授权 .

    1。什么是沟通?

    当通信限制在 控制 (事件、状态等)

    委托更灵活,应用更广。所以我可以用授权发送和接收 数据 两个对象之间。

    2。怎么用?

    到目前为止,我已经看到目标行动主要表现在 1路 通信

    代表团我已经完成了 双向的 通过具有返回值的方法进行通信。

        4
  •  0
  •   Jeba Moses    8 年前
    Target  - the object which is going to respond for your action.
    Action - the method which is triggered by your action
    Delegates - Majorly used for callback mechanism, implemented using "@protocols".
    Selector - also can be used as callback method:

    如:

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