Tengo tres clases que implementan el mismo protocolo y tienen la misma clase principal que no implementa el protocolo. Normalmente tendría el protocolo como funciones virtuales puras en la clase principal, pero no pude encontrar una forma de Objective-C para hacerlo.Objective-C Puntero a la clase que implementa un protocolo
Quiero utilizar el polimorfismo en estas subclases declarando funciones virtuales puras en la superclase y que los niños implementen esas funciones. Sin embargo, el único método de Objective-C que he encontrado para hacer esto es que cada niño decida explícitamente implementar un protocolo, cuando lo hago de esta manera la superclase no sabe que los niños implementarán ese protocolo, por lo que hay avisos de tiempo de compilación por todo el lugar.
algunos pseudo-código si eso no tenía sentido:
@interface superclass: NSObject
{}
@interface child1: superclass<MyProtocol>
{}
@interface child2: superclass<MyProtocol>
{}
El consumo de estas clases:
@class child1
@class child2
@class superclass
@interface SomeViewController: UIViewController
{
child1 *oneView;
child2 *otherView;
superclass *currentView;
}
-(void) someMethod
{
[currentView protocolFunction];
}
La única manera agradable que he encontrado para hacer las funciones virtuales puras en Objective-C es un truco al poner [self doesNotRecognizeSelector:_cmd];
en la clase padre, pero no es ideal ya que causará errores de tiempo de ejecución en lugar de tiempo de compilación.
Parece que el camino ObjC de métodos de pura virtual/abstracto es "clusters de clase". Puede ser algo que valga la pena investigar por ti. – nmr