Estoy tratando de obtener un nombre de cadena de una clase del propio objeto de clase.
// For instance
[NSArray className]; // @"NSArray"
He encontrado, object_getClassName(id obj)pero eso requiere que se le pase una instancia, y en mi caso es un trabajo innecesario.
Entonces, ¿cómo puedo obtener una cadena de un objeto de clase, y no una instancia?

NSStringFromClassimplementa? ¿Es más eficiente almacenar el nombre de la clase en unastatic NSStringvariable?[NSArray class]) es en realidad unstruct. Elstructcontiene una gran cantidad de información acerca de la clase, incluyendo su nombre, los métodos que implementa, la superclase, etc.NSStringFromClasssimplemente tira del nombre de la clase de estastructy la convierte en unaNSString. No almacene el nombre de la clase en unstatic NSString, no ofrecerá ninguna ventaja de rendimiento.NSClassFromStringfunciona un poco diferente. Dado que todos los nombres de clase existen en algún lugar del tiempo de ejecución de Objective-C,NSClassFromStringtoma la cadena y explora la lista de clases mantenida por el tiempo de ejecución buscando la clase que tiene el nombre dado. Si lo encuentra, lo devuelve, de lo contrario, vuelveNil.class_getName()en el tiempo de ejecución, que devuelve una cadena CclassNamees un método agregado por las extensiones de secuencias de comandos que solo está disponible en Mac OS X, incluso entonces es complicado en cómo funciona porque no está completamente documentado (o al menos no fue la última vez que lo verifiqué).NSStringFromClass()es la forma correcta de hacerlo.Aquí hay una forma diferente de hacerlo con un poco menos de tipeo:
fuente
+description, sin embargo, en teoría, este no es el propósito+description, por lo que este método es frágil para determinar los nombres de clase.Considere esta alternativa:
Es mucho más rápido, ya que no tiene que asignar objetos NSString y convertir ASCII a cualquier
NSStringrepresentación. Así es comoNSStringFromClass()se implementa.fuente