首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Objective-C多重继承

Objective-C多重继承
EN

Stack Overflow用户
提问于 2010-11-16 16:16:32
回答 3查看 72.6K关注 0票数 89

我有两个类,一个包含methodA,另一个包含methodB。因此,在一个新类中,我需要覆盖methodA和methodB方法。那么如何在objective C中实现多重继承呢?我对它的语法有点迷惑。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-16 16:47:06

Objective-C不支持多重继承,您也不需要它。使用合成:

代码语言:javascript
复制
@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中并没有将多重继承作为一种语言特性。

票数 136
EN

Stack Overflow用户

发布于 2013-04-22 18:14:51

这就是我如何将singletonPattern编码为“父级”,基本上我使用了协议和类别的组合。

我唯一不能添加的是一个新的"ivar“,但是我可以用相关的对象来推送它。

代码语言:javascript
复制
#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时,我只需这样做:

代码语言:javascript
复制
#import "NSObject+singleton.h"

并添加@interface MyNewClass () <BGSuperSingleton>

票数 3
EN

Stack Overflow用户

发布于 2011-06-04 08:28:03

你知道协议吗,协议是实现多重继承的方法

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4192203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档