objective c - Objective-C multiple inheritance
multiple-inheritance (3)
¿Conoces los protocolos, los protocolos son la forma de implementar la herencia múltiple?
Tengo 2 clases una incluye methodA y la otra incluye methodB. Entonces, en una nueva clase, necesito anular los métodos methodA y methodB. Entonces, ¿cómo logro herencia múltiple en el objetivo C? Estoy un poco confundido con la sintaxis.
Así es como codigo singletonPattern como "un padre" Básicamente utilicé una combinación de protocolo y categoría.
Lo único que no puedo agregar es un nuevo "ivar", sin embargo, puedo presionarlo con el objeto asociado.
#import <Foundation/Foundation.h>
@protocol BGSuperSingleton
+(id) singleton1;
+(instancetype)singleton;
@end
@interface NSObject (singleton) <BGSuperSingleton>
@end
static NSMutableDictionary * allTheSingletons;
+(instancetype)singleton
{
return [self singleton1];
}
+(id) singleton1
{
NSString* className = NSStringFromClass([self class]);
if (!allTheSingletons)
{
allTheSingletons = NSMutableDictionary.dictionary;
}
id result = allTheSingletons[className];
//PO(result);
if (result==nil)
{
result = [[[self class] alloc]init];
allTheSingletons[className]=result;
[result additionalInitialization];
}
return result;
}
-(void) additionalInitialization
{
}
Cada vez que quiero que una clase "herede" este BGSuperSingleton, simplemente lo hago:
#import "NSObject+singleton.h"
y agregue @interface MyNewClass () <BGSuperSingleton>
Objective-C no admite herencia múltiple, y no lo necesita. Usar composición:
@interface ClassA : NSObject {
}
-(void)methodA;
@end
@interface ClassB : NSObject {
}
-(void)methodB;
@end
@interface MyClass : NSObject {
ClassA *a;
ClassB *b;
}
-(id)initWithA:(ClassA *)anA b:(ClassB *)aB;
-(void)methodA;
-(void)methodB;
@end
Ahora solo necesita invocar el método en el ivar relevante. Es más código, pero simplemente no hay herencia múltiple como característica de idioma en el objetivo-C.