web-dev-qa-db-ja.com

Objective-C:初期化と初期化

Objective-Cでは、initメソッド(つまり、クラスの指定された初期化子)とinitializeメソッドの違いは何ですか?それぞれにどの初期化コードを入れる必要がありますか?

72
jrdioko

-initは、特定のオブジェクトを初期化するために使用されるインスタンスメソッドです。 +initializeはクラスメソッドであり、クラスのインスタンスが作成される前、および他のクラスメソッドが実行される前に実行されます。 +initializeはほとんど使用するものではありませんが、クラス全体が使用する可能性のある静的変数を設定する場合、またはインスタンスが作成される前に特定の条件が満たされるようにする場合に便利です。

-initメソッドに属するコードについては、 Objective-Cプログラミング言語初期化子の実装 セクションで詳しく説明しています。また、クラスの初期化(つまり、+initialize)と、同じドキュメントで クラスオブジェクト セクションでそれを行う必要がある理由についても説明しています。 +initializeに入るコードは通常、最初に初期化する必要があるクラスの特別な機能に強く結び付けられます。 +initialize(およびすべてのクラスメソッド)で留意すべき重要な点は、クラスメソッドのselfはクラスのインスタンスではなく、クラス自体を参照するということです。

125
Caleb

Java開発者に対して並列を描画するには、initはコンストラクターに似ていますが、initializeはクラスの静的ブロックに似ています。

17
Eki