在编写Cocoa并实现接受委托和一个或多个选择器用于其回调的类方法时,术语是否从“委托”和“选择器”更改为“目标”和“操作”?更重要的是,“委托”仅限于我的班级是调用的人,而不是当我的班级正在进行调用时?
答案 0 :(得分:13)
代表通常使用Protocols而不是选择器来实现。这是一种更正式的跨类通信方式,并且在有多种方法可能需要时非常有用。
目标/动作通常用于对应“类似事件”的情况,例如点击,计时器触发等。
答案 1 :(得分:3)
为了详细说明NilObject的答案,委托是通过协议实现的,采用一系列“标准化”方法。如果您有多个对象,每个对象共享同一个委托,您将无法区分发件人。因此,您会看到 - (void)delegateCallback:(id)发件人发件人的指针允许您进行此关联 为了进行此比较,需要将对sender的引用作为属性或全局变量,如果您手动释放对象,这也会更容易,因为您可以在释放之前将对象属性设置为nil(以防止垃圾指针)。
或者你可以使用selector方法传入你自己的回调方法,这种方法很好,因为你不需要引用来与:(id)发送者进行比较,你可以为每个方法都有一个方法回调你初始化的对象。另一方面,缺少引用意味着如果释放此对象,则无法将属性设置为nil。
答案 2 :(得分:1)
我认为在设计层面存在差异。
让我们选择专门做某些事情的组件。 Delegation
和targetAction
都会促进我们的组件与使用它的对象之间的某种形式的通信。
通常,需要使用哪种形式的通信来定义是使用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];