2009-09-03 11 views
6

私はObjctive-Cのインターフェイス、デリゲート、プロトコルについて私の頭を覆そうとしています。 質問があります:Objective Cのインターフェイス、デリゲート、プロトコル

デリゲートは別ファイルにする必要がありますか、クラス内で定義されたメソッドにすることはできますか?

Javaインターフェイスのようなプロトコルですか?これは、このプロトコルを使用する場合、基本的にメソッドを実装する現時点で私が理解する方法です。

私はまだインターフェイスについて混乱しています。私はかなり彼らはインターフェイスがJavaで何に似ていないと確信しています。たぶんそれはクラスで実装される変数の宣言に過ぎません。

答えて

13
  • デリゲートのポイントは、別のオブジェクトが何かをしたときに通知されます。たとえば、オブジェクトの1つがウィンドウが閉じられていることを知りたいので、それをウィンドウのデリゲートとして登録し、windowWillClose:メソッドを実装します。適切にNSWindowによって呼び出されます。したがって、デリゲートメソッドは通常別のクラスで定義されます。特定のポイントまで、クラスの機能をサブクラス化せずに拡張することができます。

  • 編集:プロトコルに関するダニエルの答えを参照)

  • @interfaceは、メンバ変数やメソッドがリストされているクラス宣言、です。 .hにあり、クラスを使用する必要がある場合はインポートします。メソッドのコードは.mファイルの@implementationにあります。 Javaでは、それは異なっており、.javaファイルは両方の目的に役立ちます。

22

デリゲートプロトコルは、それがどの.hのクラスに入れることができるように

@protocol 
//methods 
@end 

として定義する必要があり、あなたはちょうどあなたがそれを使用しようとしている時はいつでも私にトンをインポートする必要があります。

プロトコルはJavaインターフェイスと似ていません。プロトコルは、2つのクラスが連携して動作することを可能にするアダプタです。基本的には、クラスAが状態とアクションについてのメッセージを送信するようにするには、実装する必要があるデリゲートで呼び出すメソッドがあります。このクラスをサブクラス化する必要がある場合は、これらのメソッドを実装する必要があると、インターフェイスには言わないので、このクラスとやりとりしたい場合は、これらのメソッドを実装する必要があります。

+0

+1インターフェイスとプロトコルの違いの優れた説明。そのような素晴らしい説明のために+1 –

+0

+1。 – Iducool

+0

あなたはそれがインターフェイスのようではないと言うとき、それはObjective-Cインターフェイスのようなものではないことを意味します。しかし、私が間違っていなければ、Objective-Cプロトコルは* Java *インタフェースに似ています。 –

2

私がチェックアウトすることをお勧め:

The Objective-C 2.0 Programming Language

それはプロトコルとインタフェースについてのご質問のほとんどに答えを持っている必要があります。

Protocols

Interfaces

限り代表者として、彼らはあなたがデリゲートを必要とするものを作成している新しいオブジェクトまたはオブジェクトにすることができます。ファイルは実際にはそれと関係がありません。

関連する問題