java - Objective-C 委托(delegate)与 Java 监听器

标签 java objective-c cocoa delegates listener

我阅读了很多关于 Objective-C 委托(delegate)的文章和读物,试图理解它们。它们来自 Java,看起来非常像 Java 监听器。例如,假设我有一个 Java 按钮。按下按钮时,我希望发生某些事情。我的代码可能看起来像这样:

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

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

    }
}

类似的东西。在 objective-c 中,我似乎会为我的按钮调用 setDelegate 方法并将其作为委托(delegate)传递给“监听器”。然后,实际的按钮类可能会检查该委托(delegate)是否响应了某个选择器(即 actionPerformed)。如果我以正确的方式思考这个问题,那么委托(delegate)们似乎就像听众一样。那是对的吗?有什么主要区别吗?

谢谢!

最佳答案

你几乎就在那儿的按钮上。唯一真正的区别是 obj-c 中的委托(delegate)通常实现多个函数来对与它们委托(delegate)的对象相关的事件执行各种操作。例如,UITextViewDelegate 有以下方法:

– textViewShouldBeginEditing:
– textViewDidBeginEditing:
– textViewShouldEndEditing:
– textViewDidEndEditing:

我发现的唯一真正区别是您不能像在 Java 中那样以内联方式创建委托(delegate):

someButton.setOnClickListener ( new View.OnClickListener {
    @Override
    public void onClick() {
        //do stuff
    }
});

关于java - Objective-C 委托(delegate)与 Java 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6102812/

相关文章:

iphone - 如何使 NSManagedObject NSString 属性与 "copy"而不是 "retain"?

objective-c - 使用 NSRegularExpression 解析日期时出现问题

java - 在eclipse中访问Java项目中WEB-INF下的ftl文件

java - 如何在 Apache XML-RPC 服务器应用程序中实现自省(introspection)?

ios - 自定义 "Pressed"UIBarButtonItem 背景

iphone - 检查常量是否在运行时在 Obj-C 中定义

objective-c - 避免、发现和消除 Cocoa 中的内存泄漏

cocoa - 更改统一 NSToolbar 的背景颜色(在 Yosemite 中)

java - 以编程方式使用 java 重命名 JKS 别名

java - LibGDX:从 json 文件读取到 ArrayList