[objective-c] Objective-C 다중 상속

하나는 methodA를 포함하고 다른 하나는 methodB를 포함하는 두 개의 클래스가 있습니다. 따라서 새 클래스에서 methodA 및 methodB 메서드를 재정의해야합니다. 그렇다면 목표 C에서 다중 상속을 어떻게 달성합니까? 구문과 약간 혼동됩니다.



답변

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

이제 관련 ivar에서 메소드를 호출하기 만하면됩니다. 더 많은 코드이지만 Objective-C의 언어 기능으로서 다중 상속이 없습니다.


답변

이것이 내가 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>


답변

프로토콜에 대해 알고 있습니까? 프로토콜은 다중 상속을 구현하는 방법입니다.


답변