0

Objective-Cには、Alloc/Initのメタファーがあります。また、内部的に両方を連続して呼び出す「new」と呼ばれる共有の便利なメソッドも追加しました。また、FooClassというNSObjectのサブクラスを作成すると、FooClassは「new」を含むこれらの共有メソッドを取得します。

しかし...それはどのように実装されていますか?

派生クラスFooClassではなくNSObjectのインスタンスをインスタンス化するだけなので、単純に基本クラスに委任することはできませんが、それでも機能します。では、誰かが似たようなものをどのように書くのでしょうか?

言い換えれば、基本クラスはこれであってはなりません...

  + (id) somethingLikeNew{
        return [[NSObject alloc] init];  
    }

むしろこれ...

  + (id) somethingLikeNew{
        return [[<SomethingThatMapsToFooClassType> alloc] init];  
    }

...ここで、「SomethingThatMapsToFooClassType」は、NSObjectから継承し、共有メソッド「somethingLikeNew」を取得する必要がある派生クラスのタイプです。

基本的に、NSObjectからカテゴリを追加し、タイプを知る必要のあるメソッドを共有しましたが、実装はすべて汎用であるため、クラスファイルのすべての場所ではなく、NSObjectのカテゴリに分類されます(同じ方法で)あちこちに「新しい」というものはありません。ただそこにあります。)

誰?ビュラー?ビュラー?

M

4

2 に答える 2

7

Objective-Cメソッド内では、self(暗黙の)パラメーターはレシーバーを参照します。クラスメソッドの場合、selfClassオブジェクトです。したがって、ポリモーフィッククラスメソッドは次のように実装できます。

+ (id)somethingLikeNew
{
   return [[self alloc] init];
}
于 2010-07-09T05:45:34.067 に答える
0

ハ!これを投稿してから2秒後に自分で見つけました!共有メソッドで「self」を使用して、派生クラスのクラスタイプを表すことができるため、上記は単純に...

  + (id) somethingLikeNew{
        return [[self alloc] init];  
    }

くそー、それは簡単だった!これが他の誰かに役立つことを願っています!

M

于 2010-07-09T05:44:44.443 に答える