Objective-C-Delegierten vs Java Listener
Ich gelesen habe, eine Reihe von Artikeln und Lesungen auf Objective-C-Delegierten, der versucht, Sie zu verstehen. Aus Java, Sie scheinen sehr viel wie bei Java Listener. Zum Beispiel, sagen wir, ich hatte eine Taste in Java. Wenn die Taste gedrückt wird, ich will, dass etwas passiert. Mein code könnte wie folgt Aussehen:
ButtonListener myButtonListener = new ButtonListener();
someButton.addActionListener(myButtonListener);
...
class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
}
}
Sowas. In objective-c es scheint, dass ich tun würde etwas entlang der Linien von aufrufen einer setDelegate Methode für meine Taste, und übergeben Sie die "Hörer", wie ein Delegierter. Die eigentliche button-Klasse würden dann wohl überprüfen, ob das delegieren reagierte auf einige Selektor (ie. actionPerformed). Wenn ich überlege, mit das der richtige Weg ist, es scheint wie die Delegierten sind genauso wie für die Zuhörer. Ist das richtig? Gibt es irgendwelche großen Unterschiede?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist ziemlich viel auf die Schaltfläche. Der einzige wirkliche Unterschied ist, dass die Delegierten in obj-c in der Regel implementieren mehrere Funktionen zum durchführen verschiedener Aktionen, die auf Ereignisse in Bezug auf das Objekt, das Sie delegieren. Zum Beispiel, die UITextViewDelegate hat die Methoden:
Der einzige wirkliche Unterschied, den ich gefunden habe ist, Sie können nicht erstellen Sie Ihre Delegierten inline, die Art und Weise kann man in java wie:
sind Sie ähnlich, aber nicht identisch. eine delegation Muster hat breitere definition, und oft die Umsetzung definierter Aufgaben, die sich erweitern können, über das hören allein. die Aufgaben können gehören Zuhören, oder der Delegierte die Umsetzung kann definiert werden als das hören (ausschließlich).
objc Delegierten werden oft verwendet, um zu vermeiden, Unterklassen, und dienen als Zuhörer oder Daten-Provider. was einer tut, delegieren ist definiert durch das Protokoll - es kann als viel mehr als ein Zuhörer. so ein delegieren könnte eine Datenquelle/- Anbieter. es ist nur ein Mittel zum auslagern der Umsetzung in eine andere Klasse, zu entfernen aus der Klasse, was Häufig individuelle app-spezifische Umsetzung.
NSButton/UIButton bereits spezialisiert für diesem Fall über Ziel+Aktion-Mechanismen. Sie verwenden würde, Ziel+Aktion für diesen speziellen Fall.
Delegieren ist ähnlich wie listener oder observer-Protokoll ist ähnlich wie die Schnittstelle außer Protokoll definieren können optionale Funktionen (aka Nachrichten). In Objective-C, können Sie erweitern eine bestehende Klasse (ohne den source-code) mit der Kategorie zu verabschieden, ein Protokoll und machen Sie es delegieren, so dass Sie nicht brauchen, um erstellen Sie neue anonyme innere Klassen überhaupt. Sie können das nicht in Java.
Ich denke, dass eine bessere Java-analog .NET delegates in java.util.gleichzeitige pagkage: Callable, Future, Testamentsvollstrecker.