88 votes

Héritage multiple Objective-C

J'ai 2 classes l'une inclut methodA et l'autre include methodB. Donc, dans une nouvelle classe, je dois redéfinir les méthodes methodA et methodB. Alors, comment puis-je atteindre l'héritage multiple dans l'objectif C? Je suis un peu confondu avec la syntaxe.

135voto

d11wtq Points 17790

Objective-C ne prend pas en charge l'héritage multiple et vous n'en avez pas besoin. Utilisez la composition:

 @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
 

Maintenant, il vous suffit d’appeler la méthode sur l’ivar correspondant. C'est plus de code, mais il n'y a tout simplement pas d'héritage multiple en tant que fonctionnalité de langage dans Objective-C.

3voto

Septiadi Agus Points 632

C’est ainsi que je code singletonPattern en tant que "parent". En gros, j’ai utilisé une combinaison de protocole et de catégorie.

La seule chose que je ne peux pas ajouter est un nouvel "ivar", cependant, je peux le pousser avec un objet associé.

 #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
{

}
 

Chaque fois que je veux qu'une classe "hérite" de ce BGSuperSingleton, je fais juste:

 #import "NSObject+singleton.h"
 

et ajoutez @interface MyNewClass () <BGSuperSingleton>

-4voto

Nikesh K Points 480

Connaissez-vous les protocoles, les protocoles sont le moyen d'implémenter l'héritage multiple

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X