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

时间:2009-06-14 04:45:45

标签: objective-c cocoa cocoa-touch macos

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

4 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

让我们选择专门做某些事情的组件。 DelegationtargetAction都会促进我们的组件与使用它的对象之间的某种形式的通信。

通常,需要使用哪种形式的通信来定义是使用Target Action还是Delegation

<强> 1。什么是沟通?

当通信仅限于控制(事件,状态等)时,

目标行动更合适

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

<强> 2。如何

到目前为止,我已经看到目标行动主要表现为单向沟通

通过委托我自己通过使用返回值的方法完成双向通信。

答案 3 :(得分:0)

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];