Estoy tratando de obtener un nombre de cadena de una clase del objeto de clase en sí.Objective-C class -> string like: [NSArray className] -> @ "NSArray"
// For instance
[NSArray className]; // @"NSArray"
he encontrado object_getClassName(id obj)
pero que requiere una instancia puede pasar a él, y en mi caso que es un trabajo innecesario.
Entonces, ¿cómo puedo obtener una cadena de un objeto de clase y no una instancia?
Gracias! ¿Cómo se implementa 'NSStringFromClass'? ¿Es más eficiente almacenar el nombre de clase en una variable 'NSString estática '? – ma11hew28
@MattDiPasquale: todos los nombres de clase se almacenan en algún lugar en el tiempo de ejecución de Objective-C (las partes internas del tiempo de ejecución se ocultan principalmente de la aplicación y se exponen solo a través de algunas funciones de API). Cada objeto de clase (por ejemplo, '[NSArray class]') es en realidad una 'struct'. La 'struct' contiene mucha información sobre la clase, incluyendo su nombre, los métodos que implementa, la superclase, etc.' NSStringFromClass' simplemente extrae el nombre de la clase de esta 'struct' y la convierte a' NSString' . No almacene el nombre de clase en 'NSString estático', no ofrecerá ninguna ventaja de rendimiento. – dreamlax
@MattDiPasquale: 'NSClassFromString' funciona de forma diferente. Dado que todos los nombres de clase existen en algún lugar en el tiempo de ejecución de Objective-C, 'NSClassFromString' toma la cadena y explora la lista de clases mantenida por el tiempo de ejecución buscando la clase que tiene el nombre de pila. Si lo encuentra, lo devuelve; de lo contrario, devuelve 'Nil'. – dreamlax