utiliza que para objective libro estructura entorno enlazador desarrollo clases objective-c class protocols objectfactory

objective-c - libro - para que se utiliza objective c



Objetivo C: dada una identificación de clase, ¿puedo verificar si esta clase implementa un determinado protocolo? O tiene un cierto selector? (2)

Class klass = NSClassFromString(classname); if ([klass instancesRespondToSelector:@selector(create)]) { [[klass alloc] create]; }

¿Puedo, sin embargo, señalar cuántas horribles reglas de Objective-C estás rompiendo al 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 esta:

[[[klass alloc] init] create];

Pero pareces dar a entender que no quieres llamar a init.

Podría considerar un método de clase: [klass create] , que devolvería una instancia no propiedad de klass . Luego, simplemente verifica [klass respondsToSelector:@selector(create)] antes de llamarlo.

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 a Crear.


NSString *className; //assume this exists Class class = NSClassFromString(className); if ([class conformsToProtocol:@protocol(SomeProtocol)]) { id instance = [[class alloc] init]; [instance create]; }