Je souhaite utiliser ceci pour une fabrique d'objets: avec une chaîne, créez une classe et, si cette classe prend en charge un protocole (avec une méthode Create ()), allouez la classe et appelez Create.
Réponses
Trop de publicités?Class klass = NSClassFromString(classname);
if ([klass instancesRespondToSelector:@selector(create)]) {
[[klass alloc] create];
}
Puissé-je, en revanche, combien terrible Objective-C règles vous êtes à la rupture en procédant comme ci-dessus? Par exemple, vous ne devriez jamais appeler des méthodes sur un alloués-mais-pas-initialisé instance. Xcode Analyseur Statique qui va vous donner toutes sortes de mises en garde sur les fuites de mémoire.
Une meilleure option serait celle-ci:
[[[klass alloc] init] create];
Mais vous semblez insinuer que vous ne souhaitez pas appeler init.
Vous pourriez envisager une méthode de classe: [klass create]
, qui permettrait le retour d'une non-propriété de l'instance d' klass
. Vous devez alors il suffit de cocher [klass respondsToSelector:@selector(create)]
avant de l'appeler.