objective-c reflection metaprogramming objective-c-runtime

objective c - Objective-C class-> string like:[NSArray className]-> @ "NSArray"



reflection metaprogramming (3)

Aquí hay una forma diferente de hacerlo con un poco menos de tipeo:

NSString *name = [NSArray description];

Estoy tratando de obtener un nombre de cadena de una clase del objeto de la clase en sí.

// For instance [NSArray className]; // @"NSArray"

He encontrado object_getClassName(id obj) pero eso requiere que se le pase una instancia, y en mi caso eso es un trabajo innecesario.

Entonces, ¿cómo puedo obtener una cadena de un objeto de clase, y no una instancia?


Considera esta alternativa:

const char *name = class_getName(cls);

Es mucho más rápido, ya que no tiene que asignar objetos NSString y convertir ASCII a la representación de NSString . Así es como se implementa NSStringFromClass() .


NSString *name = NSStringFromClass ([NSArray class]);

Incluso puedes volver por el otro lado:

Class arrayClass = NSClassFromString (name); id anInstance = [[arrayClass alloc] init];