NSDictionary 包含属于一个层次结构的几个对象

NSDictionary containing several objects belonging to a hierarchy

我有一个名为 A 的 class 和 A 的三个子 class:SubA0, SubA1, SubA2。我需要一个字典来包含这些对象,我是这样创建的:

NSDictionary* dic = [[NSDictionary alloc]initWithObjectsAndKeys:
                   [[SubA0 alloc]init], @"SubA0",
                   [[SubA1 alloc]init], @"SubA1",
                   [[SubA2 alloc]init], @"SubA2", nil];

在classA中有一个方法:

-(void)theMethod{
    NSLog(@"theMethod - Class A");
}

此方法在所有三个子classes 中被覆盖:

Class SubA0:

-(void)theMethod{
    NSLog(@"theMethod - Class SubA0");
}

Class SubA1:

-(void)theMethod{
    NSLog(@"theMethod - Class SubA1");
}

Class SubA2:

-(void)theMethod{
    NSLog(@"theMethod - Class SubA2");
}

在我的ViewController中,这行代码:

[[dic objectForKey:classIdentifier]theMethod];

总是调用超级class中的方法,但显然我不想这样。我希望系统根据 class 类型调用正确的方法。

这个问题是否与属于 NSDictionary 的 objectForKey: 方法有关?提前谢谢你。

问题出在我的自定义初始化程序中。 class A 有两个初始化方法:

-(instancetype)init;
-(instancetype)initWithAParam:(Param *)defaultParam;

实施是:

-(instancetype)init{
    return [[A alloc] initWithAParam:0];
}
-(instancetype)initWithAParam:(Param *)defaultParam{
    self = [super init];

    if(self){
        _param = defaultParam;
    }

    return self;
}

很明显,当我写的时候:

[[SubA0 alloc]init];
[[SubA1 alloc]init];
[[SubA2 alloc]init];

系统调用 super init 和此方法 returns 一个 A 对象。要解决这个问题,只需这样重写 init

-(instancetype)init{
    return [self initWithAParam:0];
}

谢谢大家!