【问题标题】:iOS delegates from Java Developers POV来自 Java 开发人员 POV 的 iOS 代表
【发布时间】:2012-04-05 16:47:52
【问题描述】:

我从事 Java 开发已有几年了,大约一年前开始从事 Android 开发。在解决了 Android 之后,我尝试用 iOS 测试我的运气。到目前为止一切顺利,但我对“代表”的想法仍然很模糊。我在这里阅读了几篇文章,但仍然没有最好的想法。对我来说,它们似乎类似于 Java 中的继承,例如使用接口或抽象类。

谁能以我可能理解的观点澄清一下?

提前致谢。

【问题讨论】:

    标签: java iphone objective-c ios delegates


    【解决方案1】:

    不,这与继承的概念不同。

    我想说这就像在 AWT/Swing 中使用的侦听器方法。例如:

    class MyActionListener implements ActionListener {
      public void actionPerformed(ActionEvent e) { ... }
    }
    
    myComponent.addActionListener(new MyActionListener);
    

    在 ObjC 中使用委托方法如下所示:

    @class MyActionListener : NSObject<NSActionListener>
    
    -(void) actionPerformed:(NSEvent*)event;
    
    @end
    
    myComponent.delegate = [[[MyActionListener alloc] init] autorelease];
    

    实际上,您将类的一些行为委托到组合使用的特定其他对象(而不是通过继承),以便在需要时调用委托方法(无论是回调,或者提供具体的实现等等)

    【讨论】:

    • 这是一个很好的解释。你说的比我好。
    • 这解决了我的问题:) 谢谢。我马上接受答案。
    【解决方案2】:

    当使用一个对象时,你可以从它的类中继承一些回调方法。基本上,您可以在该对象有事件时做出响应。

    对象类将该事件“委托”给您的类实例。

    【讨论】:

    • 所以基本上,我拦截了对该类的预定义方法的调用,而是转到我的自定义代码?
    • 据我了解,是的。您正在成为事件处理程序,而不是该对象的类。
    猜你喜欢
    • 1970-01-01
    • 2012-01-27
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    相关资源
    最近更新 更多