Exemple:Comment puis-je créer dynamiquement une instance d'une classe?
j'ai 10 vue contrôleurs, qui sont tous attribués et initialisé de la même façon:
UIViewController *controller = [[MyViewController alloc] initWithNib];
(noter que -initWithNib est une méthode personnalisée d'une sous-classe UIViewController)
La classe de contrôleur de vue suivante est OtherViewController, et ainsi de suite. Je veux charger les contrôleurs de vue paresseusement, juste quand j'en ai besoin. Mais pour ce faire, j'ai besoin d'une sorte de "tableau" qui me donnera la classe correspondante pour un index donné, afin que je puisse l'initialiser.
J'ai fini par créer une méthode avec une grosse instruction de commutateur, qui fera juste cette allocation désagréable et initialisation séparément pour chaque contrôleur de vue unique. Je ne suis pas content avec ça. Là, il serait beaucoup mieux si je pouvais assigner la classe appropriée à une variable, puis à la fin de l'instruction switch juste allouer et initialiser cette classe à partir de la variable.
Existe-t-il un moyen d'y parvenir?
EDIT: J'ai trouvé une fonction
id class_createInstance(Class cls, size_t extraBytes)
et chaque classe semble avoir une propriété « classe ». Mais je ne peux pas l'assigner à une variable d'instance. Cela ne fonctionne pas:
Class cls = [UIImage class];
cls *image = [cls imageNamed:@"avatar.png"];
La première ligne est compilée. Mais le second donne une erreur: "image non déclarée".
On dirait une copie exacte de http://stackoverflow.com/questions/381793 – smorgan
J'ai modifié ma réponse pour inclure un motif de base. Vous voudriez faire: id image = [cls imageNamed: @ "avatar.png"]. Cependant, il est préférable d'utiliser un type de base commun ici (c'est-à-dire UIImage * image = ...) car la première partie de votre question indique que c'est le cas. – Jason