Gibt es eine Möglichkeit, zur Laufzeit herauszufinden, welche Unterklassen von einer bestimmten Klasse existieren?Unterklassen einer gegebenen Klasse in Obj-C entdecken
Bearbeiten: Von den Antworten bisher denke ich, ich muss ein bisschen mehr klären, was ich versuche zu tun. Ich bin mir bewusst, dass dies in Cocoa keine gängige Praxis ist und dass es mit einigen Vorbehalten einhergehen kann.
Ich schreibe einen Parser mit dem dynamischen Erstellungsmuster. (Siehe das Buch Cocoa Design Patterns von Buck und Yacktman, Kapitel 5.) Grundsätzlich verarbeitet die Parser-Instanz einen Stapel und instanziiert Objekte, die wissen, wie bestimmte Berechnungen durchgeführt werden.
Wenn ich alle Unterklassen der Klasse MYCommand
bekommen kann, kann ich zum Beispiel dem Benutzer eine Liste der verfügbaren Befehle zur Verfügung stellen. Im Beispiel aus Kapitel 5 verfügt der Parser über ein Substitutionswörterbuch, so dass Operatoren wie +, -, * und/verwendet werden können. (Sie sind auf MYAddCommand
, etc.) zugeordnet. Für mich schien es, dass diese Information in die Unterklasse gehörte, nicht die Parser-Instanz, da sie irgendwie die Idee der dynamischen Erstellung vereitelt.
Das sieht nach dem richtigen Weg aus. Zumal die Dokumentation erwähnt, dass die '+ load' Methode einer Klasse nach allen '+ load'-Methoden ihrer Superklassen aufgerufen wird. Vielen Dank an die anderen Leute, die auch Antworten gaben, aber ihre Antworten waren auch großartig. –
Unterklassen von MyCommand werden nicht + load für ihre Oberklasse aufrufen. + load wird nur in Klassen aufgerufen, die es implementieren. –
Überrascht dauerte es so lange, bis jemand mich korrigierte! Ich bin im Allgemeinen mit den Antworten hier einverstanden, dass automatische Registrierung eine schlechte Idee ist und eher ein bisschen mehr manuell gehandhabt werden sollte. –