Ich habe gehört, dass das Aufrufen eines Handlers (Delegaten usw.) in Objective-C möglicherweise sogar schneller ist als das Aufrufen einer virtuellen Funktion in C++. Ist das wirklich korrekt? Wenn ja, wie kann das sein?
Soweit ich weiß, sind virtuelle Funktionen nicht so langsam aufzurufen. Zumindest ist dies mein Verständnis davon, was passiert, wenn eine virtuelle Funktion aufgerufen wird:
- Holen Sie sich den Zeiger auf
vtbl
. - Dereferenzieren Sie den Zeiger und holen Sie den Anfang des Arrays von Funktionszeigern.
- Verschieben Sie (in Zeigerskalierung) den Anfang des Arrays um den Index der Methode. Da der Index zur Kompilierzeit bekannt ist, ist es so einfach wie das Hinzufügen eines Vielfachen von
uintptr_t
. - Geben Sie eine
call
-Anweisung aus.
Leider kenne ich kein Objective-C, daher ist es für mich schwierig, die Leistung zu vergleichen. Aber zumindest sieht der Mechanismus eines virtuellen Funktionsaufrufs nicht so langsam aus, oder? Wie kann etwas anderes als ein statischer Funktionsaufruf schneller sein?