Late Binding vs Dynamische Bindung
Lese ich überall, dass Objective-C hat echte dynamische Bindung, wo, wie C++ hat nur die Späte Bindung. Leider keines der Bücher, gehen auf zu erklären, ist es klar, oder diskutieren Sie die zugrunde liegende Implementierung. Für e.g C++, verwendet virtuelle Tabelle. Wie über Objective-C?
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://www.gnu.org/software/gnustep/resources/ObjCFun.html hat eine ziemlich gute Beschreibung.
Im Grunde, was dynamische Bindung bedeutet, dass die Zeit, die der Aufruf der Methode ist tatsächlich aus, die Entscheidung darüber, welche Methode aufzurufen ist. Und die Methode kann, wenn Sie es wünschen, werden dynamisch gewählt, an diesem Punkt.
Bearbeiten: Hier ist, viel mehr Details zu meinem besten Verständnis. Kann ich nicht Versprechen, dass es vollkommen richtig ist, aber es sollte weitestgehend Recht. Jedes Objekt in Objective-C ist ein struct, dessen erste Mitglied, benannt
isa
ist ein Zeiger auf eine Klasse. Jede Klasse ist selbst ein Objekt, das ist traditionell so angeordnet, wie:Zur Laufzeit, hier ein pseudo-code für das, was geschieht, auf eine Methode lookup:
Und wie lässt sich das
lookup_method
Arbeit?In der Antwort auf die naheliegende Frage, ja, das ist viel langsamer als C++'s virtuelle Tabellen. Laut benchmarks, etwa 1/3 der Geschwindigkeit. Jedes Ziel C text folgt unmittelbar, dass mit der Tatsache, dass in der realen Welt, Methode lookup-Geschwindigkeit ist fast nie ein Engpass.
Dies ist sehr viel flexibler als C-Methode ausgeführt. Zum Beispiel können Sie
forwardInvocation
zu verursachen unbekannte Methoden ein Objekt in eine variable. Diese Art der Delegierung kann getan werden, ohne zu wissen, was der Typ des Objekts zur Laufzeit, oder welche Methoden Sie unterstützen. Sie können auch hinzufügen von Methoden zu Klassen - auch zur Laufzeit, wenn Sie es wünschen - ohne Zugriff auf den source code. Sie haben auch reiche runtime Introspektion von Klassen und Methoden.Die offensichtliche Kehrseite, dass alle C++ - Programmierer werden springen nach oben und unten geht, ist, dass Sie entsorgt haben jede Hoffnung der Kompilierung die Typüberprüfung.
Tut, erklären die Unterschiede und geben Ihnen genügend Details, um zu verstehen, was Los ist?
Dynamic binding und late binding sind das gleiche,in der Tat. Wir haben static binding oder early binding , das prüft die Probleme, die passieren, zur compile-Zeit(Fehler bezüglich der thevariables,Ausdrücke, usw.) und diese Informationen werden in einer v-Tabelle(virtual Methode table). Was die späte Bindung tut, ist, dass es nur bindet die Methoden, mit denen in der v-Tabelle.