类集群初始化

时间:2010-08-28 04:40:14

标签: iphone objective-c class-cluster

我的iPhone应用程序有一个抽象类WorkingView。它是UIView的子类。 WorkingView反过来会有一堆具体的子类。其中两个是SimplifyView和MultiplyView。

我正在尝试编写创建WorkingView新实例的方法。此方法应该传入模式并返回适当的具体子类的实例。根据{{​​3}}的答案,这是我到目前为止所做的:

+ (id)newWorkingViewWithFrame:(CGRect)frame mode: (modeEnum) mode {
    WorkingView *ret;
    switch (mode) {
        case simplifyMode:
            ret = [[SimplifyView alloc]initWithFrame: frame];
            break;
        case multiplyMode:
            ret = [[MultiplyView alloc]initWithFrame: frame];
            break;
        // additional cases here
        default:
            return nil;
    }
    // more initialization here
    return ret;
}

到目前为止,这么好。但这是问题所在。在SimplifyView的init方法中,我需要通过UIView的init方法运行该对象。调用[super initWithFrame:frame]只能让我看到WorkingView,而不是UIView。我想我可以在WorkingView中创建一个initWithFrame:方法,该方法又调用UIView的initWithFrame:方法 - 但这感觉很乱。

处理此问题的适当方法是什么?

1 个答案:

答案 0 :(得分:0)

如果从子类中调用[super initWithFrame:frame],运行时将爬上继承层次结构,寻找实现该方法的类,从super开始。如果super没有实现initWithFrame:,那么运行时将继续攀升,直到最终找到并调用UIView中的默认实现。