objective c - Convierta una cadena("MyExampleClass") en un nombre de clase(MyExampleClass)
objective-c cocoa (4)
Desea NSClassFromString
:
NSString *classNameStr = @"MyExampleClass";
Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];
También puede usar las interfaces de tiempo de ejecución objc (por ejemplo, objc_getClass(const char* name)
, objc_lookUpClass(const char* name)
). El primero no cargará una clase. El último lo hará. Esa opción podría ser algo bueno en algunos casos.
Quiero convertir una cadena a un nombre de clase. Imagine que tengo una cadena, que cambia, que contiene un nombre de clase, por ejemplo, la cadena "MyExampleClass"
. Ahora, quiero crear un objeto de la clase MyExampleClass
. Tengo que obtener el nombre de clase de la cadena. Quiero hacer algo como lo siguiente. (Considere el código solo como un boceto).
NSString *classNameStr = "MyExampleClass";
id theClass = [UIClass classFromString:classNameStr];
theClass *myObject = [[theClass alloc] init];
¿Cuál es la forma correcta de hacer esto?
Esto es lo que querrías:
Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];
Tenga en cuenta que no puede usar theClass
como un nombre de tipo (es decir, theClass *myObject
). Tendrás que usar id
para eso.
Si intenta construir sus clases dinámicamente, le recomiendo que eche un vistazo al patrón de diseño de método de fábrica; de lo contrario, perderá la pista de quién crea qué y cómo.
Para hacerlo, puede codificar una clase que recibe una cadena y devuelve una clase dependiendo de la cadena de entrada.
Eche un vistazo al libro "Patrones de diseño: elementos del software reutilizable orientado a objetos" por Erich Gamma; Richard Helm; Ralph Johnson; John Vlissides.
id a = [[NSClassFromString(@"MyExampleClass") alloc] init];
usa este, esto te dará lo que quieras.