objective-c inheritance multiple-inheritance

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.