首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Objective-C委托与Java监听器

Objective-C委托与Java监听器
EN

Stack Overflow用户
提问于 2011-05-24 04:44:47
回答 4查看 6.9K关注 0票数 19

我已经阅读了一大堆关于Objective-C委托的文章和读物,试图理解它们。它们来自Java,看起来非常像Java侦听器。例如,假设我在Java中有一个按钮。当按钮被按下时,我希望发生一些事情。我的代码可能如下所示:

代码语言:javascript
复制
ButtonListener myButtonListener = new ButtonListener();    
someButton.addActionListener(myButtonListener);
...

class ButtonListener implements ActionListener
{
   public void actionPerformed(ActionEvent e)
   {

    }
}

差不多吧。在objective-c中,我似乎会做一些类似的事情:为我的按钮调用一个setDelegate方法,并将它作为一个委托传递给“侦听器”。然后,实际按钮类可能会检查委托是否响应了某个选择器(即,actionPerformed)。如果我的想法是正确的,那么委托看起来就像是监听器。对吗?有什么主要区别吗?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-24 04:50:59

你说得太对了。唯一真正的区别是obj-c中的委托通常实现多个函数,以对与它们委托的对象相关的事件执行各种操作。例如,UITextViewDelegate具有以下方法:

代码语言:javascript
复制
– textViewShouldBeginEditing:
– textViewDidBeginEditing:
– textViewShouldEndEditing:
– textViewDidEndEditing:

我发现唯一真正的区别是你不能像在java中那样内联地创建你的委托,比如:

代码语言:javascript
复制
someButton.setOnClickListener ( new View.OnClickListener {
    @Override
    public void onClick() {
        //do stuff
    }
});
票数 10
EN

Stack Overflow用户

发布于 2011-05-24 04:52:53

它们是相似的,但并不完全相同。委托模式具有更广泛的定义,并且通常实现定义的任务,这些任务可以扩展到仅限于侦听。任务可以包括侦听,或者可以将代理的实现定义为侦听(独占)。

objc委托通常用于避免子类化,并用作侦听器或数据提供者。委派做什么是由协议定义的-它可以比侦听器服务更多。因此,委托可以是数据源/提供者。这只是一种将实现卸载到另一个类的方法,从类中删除经常定制的、特定于应用程序的实现。

NSButton/UIButton已经通过target+action机制专门针对这种情况。对于这个特定的情况,您将使用target+action。

票数 7
EN

Stack Overflow用户

发布于 2012-10-19 04:22:09

委托类似于侦听器或观察者,协议类似于接口,除了协议可以定义可选函数(也称为消息)。在Objective C中,您可以使用category扩充现有的类(没有其源代码),以采用协议并使其成为委托,因此您根本不需要创建新的匿名内部类。在Java中不能这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6102812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档