Tengo 2 clases secundarias que heredan de 'MyClass' y cada clase secundaria debe ser singleton.Creando una clase singleton con dispatch_once para clase hiearchy
He utilizado este modelo para obtener una instancia estática cuando no tengo ninguna otra clase que heredan:
+ (MyClass *)getInstance
{
static dispatch_once_t once;
static MyClass *instance;
dispatch_once(&once, ^{
instance = [[MyClass alloc] init];
});
return instance;
}
Esto funciona muy bien. Ahora, si agrego dos nuevas clases secundarias, FirstClass y SecondClass, que heredan de MyClass, ¿cómo me aseguro de recuperar la clase ChildClass respectiva?
dispatch_once(&once, ^{
// No longer referencing 'MyClass' and instead the correct instance type
instance = [[[self class] alloc] init];
});
FirstClass *firstClass = [FirstClass getInstance]; // should be of FirstClass type
SecondClass *secondClass = [SecondClass getInstance]; // should be of SecondClass type
hacer lo anterior significa que siempre que regrese cualquier clase que crea una instancia primero como mi segundo tipo de clase:
first: <FirstClass: 0x884b720>
second: <FirstClass: 0x884b720>
// Note that the address and type as identical for both.
¿Cuál es la mejor manera de crear los únicos clase hija respectivos sin añadir getInstance
método para cada una de las clases de niños?
La razón por la que tengo esta jerarquía es que tengo una cantidad de código común compartido y datos que todas mis clases hijas tienen (fuera de la 'instancia compartida'. Esta es también la razón por la que estoy usando la herencia frente a los protocolos. También quería no repita el mismo código de instanciación para las tres clases derivadas. –
+1 sobre el nombre "get". –