Множественное наследование Objective-C - PullRequest
87 голосов
/ 16 ноября 2010

У меня есть 2 класса, один включает метод A, а другой - метод B. Поэтому в новом классе мне нужно переопределить методы methodA и methodB. Итак, как мне добиться множественного наследования в цели C? Я немного запутался с синтаксисом.

Ответы [ 3 ]

133 голосов
/ 16 ноября 2010

Objective-C не поддерживает множественное наследование, и оно вам не нужно.Используйте состав:

@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

Теперь вам просто нужно вызвать метод на соответствующем иваре.Это больше кода, но просто нет множественного наследования как функции языка в target-C.

3 голосов
/ 22 апреля 2013

Вот как я кодирую singletonPattern как «родительский». В основном я использовал комбинацию протокола и категории.

Единственное, что я не могу добавить, - это новый "ivar", однако я могу нажать на него связанным объектом.

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

}

Всякий раз, когда я хочу, чтобы класс "унаследовал" этот BGSuperSingleton, я просто делаю:

#import "NSObject+singleton.h"

и добавьте @interface MyNewClass () <BGSuperSingleton>

0 голосов
/ 04 июня 2011

Знаете ли вы о протоколах, протоколы способ реализации множественного наследования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...