私の iPhone アプリには抽象クラス WorkingView があります。UIView のサブクラスです。WorkingView には、具体的なサブクラスがたくさんあります。そのうちの 2 つは SimplifyView と MultiplyView です。
WorkingView の新しいインスタンスを作成するメソッドを作成しようとしています。このメソッドには渡されたモードがあり、適切な具象サブクラスのインスタンスを返す必要があります。この質問への回答によると、これは私がこれまでに持っているものです:
+ (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 までは表示されません。UIView の initWithFrame: メソッドを呼び出す initWithFrame: メソッドを WorkingView に作成できると思いますが、それはハックのように感じます。
これを処理する適切な方法は何ですか?