Einfache Antwort würde Protokolls.
Einfach aber falsch. Ein Protokoll ist eine Schnittstellenspezifikation. Es handelt sich um eine Sammlung von Nachrichten, die ein Objekt beantworten muss (wobei das Schlüsselwort @optional
vorerst ignoriert wird).
Der Begriff "virtuelle Funktion" hat in Objective-C kein direktes Gegenstück. In Objective-C rufen Sie keine Funktionen für Objekte auf, Sie senden Nachrichten an sie. Das Objekt selbst entscheidet dann, wie auf die Nachricht zu antworten ist, typischerweise indem die Nachricht in ihrem Klassenobjekt nachgeschlagen wird, die zugehörige Methode gefunden und aufgerufen wird. Beachten Sie, dass dies alles zur Laufzeit geschieht, nicht zur Kompilierzeit.
Die Zuordnung zwischen Nachrichten (oder "Selektoren", um ihnen ihren technischen Begriff zu geben) und Methoden ist vollständig aus der @implementation
aufgebaut. Die Methodendeklarationen in der @interface
sind nur da, um dem Compiler die Informationen zu geben, die er benötigt, um Sie zu warnen, dass Sie möglicherweise eine Methodenimplementierung vergessen haben. Und es ist nur eine Warnung, weil Sie bis zur Laufzeit nicht feststellen können, ob das Objekt wirklich auf die Nachricht reagiert oder nicht. Zum Beispiel könnte jemand anderes eine Kategorie zu einer vorhandenen Klasse hinzufügen, die Implementierungen für fehlende Methoden bereitstellt, oder eine Klasse könnte forwardingTargetForSelector:
überschreiben, um Nachrichten weiterzuleiten, auf die sie nicht anderswo antwortet.
http://stackoverflow.com/questions/5222083/implement-a-pure-virtual-method-in-objective-c –