J'essaie d'obtenir un nom de chaîne d'une classe à partir de l'objet de classe lui-même.Objective-C class -> Chaîne semblable à: [NSArray className] -> @ "NSArray"
// For instance
[NSArray className]; // @"NSArray"
J'ai trouvé object_getClassName(id obj)
mais qui nécessite une instance soit passée à, et dans mon cas qui est un travail inutile.
Alors, comment puis-je obtenir une chaîne à partir d'un objet de classe, et pas une instance?
Merci! Comment 'NSStringFromClass' est-il implémenté? Est-il plus performant de stocker le nom de classe dans une variable 'static NSString'? – ma11hew28
@MattDiPasquale: Tous les noms de classe sont stockés quelque part dans l'environnement d'exécution Objective-C (les composants internes de l'environnement d'exécution sont généralement masqués dans l'application et exposés uniquement via quelques fonctions API). Chaque objet de classe (par exemple '[classe NSArray]') est en fait un 'struct'. Le 'struct' contient beaucoup d'informations sur la classe, y compris son nom, les méthodes qu'elle implémente, la superclasse, etc.' NSStringFromClass' tire juste le nom de la classe de cette 'struct' et la convertit en' NSString' . Ne stockez pas le nom de classe dans un 'NSString statique ', il n'offrira aucun avantage de performance. – dreamlax
@MattDiPasquale: 'NSClassFromString' fonctionne un peu différemment. Puisque tous les noms de classes existent quelque part dans le runtime Objective-C, 'NSClassFromString' prend la chaîne et explore la liste des classes maintenues par le moteur d'exécution recherchant la classe qui a le nom donné. S'il le trouve, il le renvoie, sinon il renvoie 'Nil'. – dreamlax