Ich möchte dies für eine Objektfabrik verwenden: Anhand einer Zeichenkette eine Klasse erstellen, und wenn diese Klasse ein Protokoll unterstützt (mit einer Create()-Methode), dann ordnen Sie die Klasse zu und rufen Erstellen.
Antworten
Zu viele Anzeigen?Class klass = NSClassFromString(classname);
if ([klass instancesRespondToSelector:@selector(create)]) {
[[klass alloc] create];
}
Darf ich Sie jedoch darauf hinweisen, wie viele schreckliche Objective-C-Regeln Sie mit dem oben genannten Vorgehen verletzen? Zum Beispiel sollten Sie niemals Methoden auf einer zugewiesenen, aber nicht initialisierten Instanz aufrufen. Der Xcode Static Analyzer gibt Ihnen alle Arten von Warnungen über Speicherlecks.
Eine bessere Option wäre diese:
[[[klass alloc] init] create];
Aber Sie scheinen anzudeuten, dass Sie init nicht anrufen wollen.
Sie könnten eine Klassenmethode in Betracht ziehen: [klass create]
was eine nicht-eigene Instanz von klass
. Dann würden Sie einfach überprüfen [klass respondsToSelector:@selector(create)]
bevor Sie es aufrufen.