Manière optimale d’initialiser divers objects

Je dois initialiser de nombreux types d’objects en fonction d’un paramètre entier. Ils ont tous les mêmes méthodes d’initialisation globales.

Pour le moment j’ai le code suivant

#def APPLE 1 #def PEAR 2 switch (t) { case APPLE: newobj = [[FApple alloc] init]; break; case PEAR: newobj = [[FPear] alloc] init]; break; default: retobj = nil; } 

Je crois qu’il doit y avoir un meilleur moyen de faire cela. Quand j’ajoute FOrange, je dois y aller et append une autre ligne ici.

Quel serait un meilleur moyen?

Vous avez besoin d’un numéro de mappage -> tapez quelque part, mais vous n’avez pas besoin de répéter le code:

 NSDictionary* d = [NSDictionary dictionaryWithObjectsAndKeys: [FPear class], [NSNumber numberWithInt:PEAR ], [FApple class], [NSNumber numberWithInt:APPLE], nil]; Class c = [d objectForKey:[NSNumber numberWithInt:t]]; id x = [[c alloc] init]; 

Ce que vous faites ne présente aucun NSClassFromSsortingng() bien que l’utilisation d’un type énuméré puisse être moins sujette à l’erreur que #define s), mais vous voudrez peut-être consulter NSClassFromSsortingng() , qui fait ce que son nom suggère

 - (id)newFruit:(NSSsortingng *)classSsortingng { //pass in @"FApple" or @"FPear" Class fruitClass = NSClassFromSsortingng(classSsortingng); return [[fruitClass alloc] init]; } 

Cela pourrait aussi avoir un léger impact sur les performances.