1

これはおそらく以前に尋ねられましたが、何を検索すればよいかわかりません。これが私の階層です: NSObject > FirstSubclass > SecondSubclass。しかし、特定の条件が満たされたときに FirstSubclass のいくつかの詳細を変更する必要がある新しい機能をアプリに実装するつもりです。したがって、実際には、FirstSubclass の動作を上書きするには、FirstSubclass と SecondSubclass の間にサブクラスが必要です。SecondSubclass 自体を上書きする必要はありませんが、super私が持っているすべての異なる SecondSubclass サブクラスに対して何らかの種類のものが必要です。「if then ステートメント」を使用するように FirstSubclass のすべてを変更することもできましたが、最初に別のオプションがないかどうかを確認したかったのです。これには「プロトコル」が必要ですか?のようにSecondSubclass : FirstSubclasslass <WeirdThingIDontKnow>

4

2 に答える 2

0

ダックタイピングが必要なようです。respondsToSelector目的 c では、performSelectorまたはを使用して達成できますNSInvocation。これにより、クラス階層が大幅に簡素化されます。

于 2010-07-21T18:51:40.133 に答える
0

FirstSubclass (InBetweenSubClass など) から派生する新しいオブジェクトを作成し、FirstSubclass の必要なメソッドをオーバーライドします。次に SecondSubclass を FirstSubclass ではなく InBetweenSubClass から派生するように変更します。

Objective-C には「オーバーライド」に相当するものはありません。同じシグネチャを持つメソッドを実装するだけで、基本クラスのそのメソッドはオーバーライドされます。このようなこともできます。特別な条件が満たされた場合は new メソッドを使用し、そうでない場合は基本 (スーパー) クラスのメソッドを使用します。

-(void) test
{
    if (self.specialcondition)
    {
        [self newTest];
    }
    else
    {
        [super test];
    }

}
于 2010-07-21T18:52:58.977 に答える