2012-01-04 8 views
1

initメソッドが初期化を行う前にスーパークラスによってオブジェクトが適切に初期化されることを保証するために、イニシャライザパターン以外の目的は何ですか?obj-cでのinitパターンの目的とその使用

なぜこれが必要ですか?

我々は他の人が代わりにスーパークラス初期化子の専用初期化子を呼び出すshoudなぜ、複数の初期化メソッドを持つクラスを持っていますか?

私はJavaのバックグラウンドから来ているので、これを完全に理解していない - Javaで一致する可能性が最も近いのはシングルトンパターンだが、専用のイニシャライザを呼び出している他の人は、javaのように選択肢があるむしろあなたは "すべき"です。

その初期化子呼び出しているsuperクラスは、そのクラスの、必ずしもインスタンスを任意の種類のオブジェクトを返すことができるので、いずれかは、THX

答えて

2
  1. 初期化子パターンが必要である....手の込んだことができます。これは、たとえばNSStringがどのように動作するかです。実際には、さまざまな使用パターンに対して最適化されたさまざまな種類の文字列を実装するクラスターのクラスターです。そのため、子孫のをNSString子孫にすると、例えばNSCFStringというインスタンスになります。

  2. 目的C.で指定イニシャライザと呼ばれるパターンクラスは、多くの初期化子を持っている場合は、指定されたとして、そのうちの一つが選択され、他のすべてのスーパー、それをしませ呼び出すことで実装する必要がありますがあります。これは、子クラスのイニシャライザを正しくオーバーライドするために重要です。指定されたクラスのみを初期化する必要があります(コードがよく書かれており、指定されたイニシャライザを利用していると仮定します)。

+0

thxその情報のために、これは私に3の好奇心を吹き飛ばしたと思います 1)は、obj cのメソッドの静的なfinalということはありませんか? 2)すべてのNxxxメソッドは、独自の機能を実装するすべての子クラスでオーバーライドできますか? 3)obj cはC++のような多重継承を許しますか?またはそのより多くの単一継承。 – codejunkie

+0

@RedMan 1. 'static final'がオーバーライドできない場合、objective-cはそれを欠いています(それはObjective Cのコンセプトです。サードパーティのクラスのすべてのメソッドをオーバーライドすることができます)。 (クラスはそのクラスをオーバーライドすることが合理的である場合)およびカテゴリ(カテゴリはちょうど "パッチ"、追加および再実装されたクラスメソッドのセットです)でオーバーライドされます3.多重継承はありませんが、メッセージの転送は、助けになる可能性があります。 – iHunter

+0

java/objの情報のためのthxプロトコルは何ですか?あなたが述べたようにJavaインターフェイスと同じですか?メッセージ転送?私は、リンゴdevのdocは、オブジェクトメッセージのすべてを同じもののビットを渡すとしてこれを参照すると思った? 1つの事は私にたくさんのbafels合成はそこにJavaのこれに近い比較ですか? – codejunkie

関連する問題