Cree una subclase de una clase usando el inicio del padre - de otra clase

Edición: Este síndrome de downvoting aquí apesta a lo grande. Hice una pregunta donde, en mi opinión, demostré que hice mi tarea y pedí consejo. Las respuestas mejoradas implicaban advertencias de tiempo de compilación, mientras que mi propia y probablemente la forma más limpia de POO no recibió ningún interés.

Breve resumen para entender por qué necesito esto y qué intento hacer: estoy escribiendo un ORM que implementa el patrón del asignador de datos. Un asignador (es decir, para resultados de SQLite) debe crear subclases de una clase de entidad, utilizando el inicializador de la clase de entidad base. Así que ahí está el problema.

El asignador no sabe, y no debe, conocer clases específicas. Las descripciones de mapeo y los mapeadores específicos para diferentes fuentes de datos se extraen de la clase de entidad, y por parte del diseño de la descripción de la entidad.

Las entidades son similares a NSManagedObject, aunque el ORM sigue un patrón diferente. La descripción con la que se crea cualquier entidad es similar a NSEntityDescription (pero también sigue un patrón y propósito diferente).

Así que mi objetivo es crear entidades que sé que son subclases de ManagedEntity, utilizando el método init de ManagedEntity.

Así que el inicio de mi mapeador se ve así:

- (id)initWithEntityClass:(Class)EntityClass entityDescriptor:(EntityDescription*)entityDescriptor
{
self = [super init];
if (self)
{
    _EntityClass = EntityClass; 
    _entityDescription = entityDescription;

    ... (assert that class is of subclass of ManagedEntity)
}

Y algún tiempo después, en mi asignador, quiero crear la entidad concreta:

-(void)createEntityWithSQLiteResultSet:(sqlite3_stmt*)resultSet
{
    // Problem: How to init a class known to be a subclass of ManagedEntity?  
    ManagedEntity *newEntity = [[_EntityClass] alloc]     initWithEntityDescription:_entityDescription];
}

Entonces, ¿cómo creo esta clase secundaria de ManagedEntity, usando el inicio de ManagedEntity?

Claro, podría usar respondsToSelector () para initWithEntityDescription e invocar eso. Pero algo me dice que debería haber una forma más elegante donde ya se conoce el tipo de clase. Además, respondsToSelector y la invocación del selector solo realizarán una verificación en tiempo de ejecución. A pesar de que el inicializador de entidad no debería cambiar, parece una mala elección perder el tiempo de compilación para verificar si existe este método.

Respuestas a la pregunta(2)

Su respuesta a la pregunta