Quiero usar esto para una fábrica de objetos: Dada una cadena, crea una clase, y si esta clase admite un protocolo (con un método Create), entonces asigna la clase y llama al Crear.Objetivo C: Dada una identificación de clase, ¿puedo verificar si esta clase implementa un determinado protocolo? O tiene un cierto selector?
35
A
Respuesta
15
Class klass = NSClassFromString(classname);
if ([klass instancesRespondToSelector:@selector(create)]) {
[[klass alloc] create];
}
Puedo, sin embargo, señalar cuántas reglas horrible Objective-C que está rompiendo por hacer lo anterior? Por ejemplo, nunca debe llamar a métodos en una instancia asignada pero no inicializada. El Xcode Static Analyzer le dará todo tipo de advertencias sobre fugas de memoria.
Una mejor opción sería la siguiente:
[[[klass alloc] init] create];
Pero parecería implicar que usted no desea llamar init.
Podría considerar un método de clase: [klass create]
, que devolvería una instancia no propia de klass
. Luego, solo debe marcar [klass respondsToSelector:@selector(create)]
antes de llamarlo.
253
NSString *className; //assume this exists
Class class = NSClassFromString(className);
if ([class conformsToProtocol:@protocol(SomeProtocol)]) {
id instance = [[class alloc] init];
[instance create];
}
Cuestiones relacionadas
- 1. jQuery Determine si una clase coincidente tiene una identificación dada
- 2. C# ¿Cómo verificar si una clase implementa una interfaz genérica?
- 3. Objective-C Puntero a la clase que implementa un protocolo
- 4. ¿Cómo verificar si existe un cierto ensamblaje?
- 5. En el Objetivo C, ¿puede verificar si un objeto tiene una propiedad o mensaje en particular?
- 6. Compruebe si una clase tiene un método
- 7. ¿Prueba si una clase tiene un atributo?
- 8. AS3 - ¿Puedo saber si una clase implementa una interfaz (o es una subclase de otra clase)?
- 9. tipo Clase C Objetivo
- 10. ¿Cómo implementa esta clase IDisposable si no tiene un método Dispose?
- 11. Dada una clase, vea si la instancia tiene el método (Ruby)
- 12. Objetivo C ¿Clase o estructura?
- 13. Objetivo-c usando hilo provoca: objetivo no implementa selector de
- 14. jQuery: conseguir Identificación del selector de clase
- 15. jQuery: compruebe si un objeto tiene clase
- 16. ¿Cómo verificar si un objeto tiene cierto método/propiedad?
- 17. Escriba un selector de jquery para seleccionar una clase con un cierto patrón
- 18. Dada una instancia de cualquier tipo de clase, ¿cómo saber qué clase principal y/o rasgos hereda o implementa?
- 19. ¿Cómo puedo verificar si una lista contiene un objeto de cierto tipo? C#
- 20. ¿Cómo verificar si una fecha está en un rango determinado?
- 21. objetivo c constantes clase
- 22. Objetivo C - Clase KeyValuePair?
- 23. ¿Cómo verificar si un tipo sobrecarga/admite un determinado operador?
- 24. ¿Cómo se implementa una clase en C?
- 25. ¿Cómo puedo verificar si existe un objeto en un determinado índice de un NSMutableArray?
- 26. ¿Puedo usar métodos de una clase sin instanciar esta clase?
- 27. Determinar si una clase implementa una interfaz muy específica
- 28. Objetivo C - ¿Cómo agregar un método a una clase existente?
- 29. Rieles: ¿Cómo puedo verificar si una columna tiene un valor?
- 30. ¿Cómo verificar si un delegado responde a un selector?
Gracias. Tienes razón, el método Create debería ser un método de clase. Creo que esta es la forma en que se diseñan las fábricas de objetos. – Jacko
Esta no es la mejor respuesta. Chuck es mejor. – rafaperez