Objective-C classe -> string comme: [NSArray className] -> @“NSArray”
Je suis en train d'essayer d'obtenir une chaîne de caractères d'un nom de classe à partir de la classe de l'objet lui-même.
//For instance
[NSArray className]; //@"NSArray"
J'ai trouvé object_getClassName(id obj)
mais qui nécessite une instance d'être passé, et dans mon cas, c'est un travail inutile.
Alors, comment puis-je obtenir une chaîne de caractères à partir d'un objet de classe, et pas une instance?
InformationsquelleAutor Alex Wayne | 2010-02-25
Vous devez vous connecter pour publier un commentaire.
Vous pouvez même aller dans l'autre sens:
NSStringFromClass
mis en œuvre? Est-il plus performant pour stocker le nom de la classe dans unstatic NSString
variable?[NSArray class]
) est en fait unestruct
. Lestruct
contient beaucoup d'informations sur la classe, y compris son nom, les méthodes qu'il met en œuvre, de la super-classe, etc.NSStringFromClass
tire juste le nom de la classe à partir de cestruct
et la convertit en unNSString
. Ne pas stocker le nom de la classe dans unstatic NSString
, il n'offre pas d'avantage en termes de performance.NSClassFromString
prend la corde et explore la liste des classes maintenu par le moteur d'exécution à la recherche pour la classe qui a le nom donné. Si il le trouve, il la retourne, sinon, elle retourneNil
.class_getName()
dans l'exécution, qui renvoie une chaîne CNSStringFromClass()
est la bonne façon d'aller à ce sujet.[arrayClass classMethod]
va appeler une méthode de classe, tout comme faire[[someArray class] classMethod]
.Voici une autre façon de le faire avec un peu moins de taper:
+description
, cependant, en théorie, ce n'est pas le but pour+description
, et donc cette méthode est fragile pour la détermination des noms de classe.Considérer cette alternative:
C'est beaucoup plus rapide, car elle n'a pas à NSString alloc de l'objet et de le convertir en ASCII à ce que
NSString
représentation. C'est commentNSStringFromClass()
est mis en œuvre.