Objective-C委托与Java监听器

JPC*_*JPC 19 java cocoa delegates objective-c listener

我已经阅读了一些关于Objective-C代表的文章和阅读材料,试图理解它们.来自Java,他们看起来非常像Java听众.例如,假设我在Java中有一个按钮.当按下按钮时,我想要发生一些事情.我的代码可能看起来像这样:

ButtonListener myButtonListener = new ButtonListener();    
someButton.addActionListener(myButtonListener);
...

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

    }
}
Run Code Online (Sandbox Code Playgroud)

这样的事情.在objective-c中,似乎我会按照为我的按钮调用setDelegate方法并将"侦听器"作为委托传递给它做一些事情.然后,实际的按钮类可能会检查该委托是否响应某个选择器(即actionPerformed).如果我以正确的方式思考这个问题,那么代表就像听众一样.那是对的吗?有什么重大差异吗?

谢谢!

Dan*_*n F 10

你在那里按钮很近.唯一真正的区别是obj-c中的委托通常实现多个函数来对与其委托的对象有关的事件执行各种操作.例如,UITextViewDelegate具有以下方法:

– textViewShouldBeginEditing:
– textViewDidBeginEditing:
– textViewShouldEndEditing:
– textViewDidEndEditing:
Run Code Online (Sandbox Code Playgroud)

我发现的唯一真正的区别是你无法在java中创建你的代理,就像你在java中一样:

someButton.setOnClickListener ( new View.OnClickListener {
    @Override
    public void onClick() {
        //do stuff
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 从技术上讲,使用块,您可以创建内联代理.我的硬盘驱动器上有一个实用程序类... (4认同)

jus*_*tin 7

它们相似但不完全相同.委托模式具有更广泛的定义,并且通常是实现已定义的任务,这些任 任务可以包括监听,或者委托的实现可以被定义为监听(排他).

objc委托通常用于避免子类化,并用作监听器或数据提供者.委托所做的是由协议定义的 - 它可以比监听器更多地起作用.所以委托可以是数据源/提供者.它只是一种将实现卸载到另一个类的方法,从类中删除经常定制的特定于应用程序的实现.

NSButton/UIButton已经通过目标+动作机制专门针对这种情况.您将针对此特定情况使用目标+操作.