0

これは不可能かもしれないと思いますが、私がやろうとしていたことは、サブクラスも初期化するスーパークラス「ロード」に静的初期化子を書き込もうとしたことです。

+ (id) load
{
    Class c = [self class];
    NSString *cString = NSStringFromClass([self class]);
    NSLog(@"%@",cString);

    id a = [[c alloc] init];
    [a autorelease];
    return a;
}

ここで [self class] の結果はスーパークラスですが、クラス自体を初期化したい (この場合は常にサブクラスになります)。たぶん、これはひどいプログラミングのアイデアです。

4

1 に答える 1

0

[[[b alloc] init] release] と入力する必要がありますが、これは少し見苦しく、何をするのかわかりません。

同意しません。このコードが何をしているのかは非常に明白です。クラス B を割り当て (ちなみに、クラスは大文字にする必要があります)、初期化してから解放しています。

【ビーロード】

一方、これは b がロードされているという事実以外には何も教えてくれません。ローディングとは?割り当てて初期化しますか?

a で load を定義したいのですが、それ以外の場合は、load をコピーして b、c、d (a から継承) に貼り付けるのは時間の無駄です。

これは見苦しいですし、それが何をしているのかはそれほど明白ではありません。また、クラスはサブクラスについて何も知らないはずです。

私見、あなたの解決策はあまり良いものではありません。それを行う方法は、スーパークラスにロードメソッドを持たせることです (よりわかりやすい名前の指定されたイニシャライザを好むでしょう)。これにはすべての一般的な機能があります。次に、サブクラスでロード メソッドをオーバーライドしてスーパー実装を呼び出し、その特定のサブクラスに必要なコードを追加します。

于 2012-07-31T08:33:14.080 に答える