2012-02-23 5 views
-2

ように私はコメントに遭遇しました:デリゲートの設定は何を意味しますか? XML解析のためのサンプルコードで

NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 

//Initialize the delegate. 
XMLParser *parser = [[XMLParser alloc] initXMLParser]; 

//Set delegate 
[xmlParser setDelegate:parser]; 

は、誰かが私に一般的には、プロトコルのデリゲートメソッドとデリゲートの違いを教えてください。

+2

デリゲートは仕事をする別のクラスです。 – LuckyLuke

+0

[この質問](http://stackoverflow.com/q/4449382/141081) – Dirk

+0

質問をよく理解していない...委任パターンを使用しています...よく使用されるiOS開発のパターン「プロトコルの委任方法」とはどういう意味ですか? – Yoeri

答えて

2

プロトコルインターフェイスのようなものです。あなたがJAVAかC#から来たのであれば、あなたはすでにこれを実際に見てきました。実装されていないメソッドのリストです。クラスは、特定のプロトコルに準拠する(またはできない)ことができます。クラスは、必要とマークされたメソッドを実装する必要があります。選択肢であるものは実装できませんでした。

代わりに、委任は、2つの異なるオブジェクト間のリレーションシップを作成するパターンです。言い換えれば、BはAのために何かをします。

2つの関係は、(特定のクラスの)デリゲートメソッドがプロトコルにリストされているということです。ここでは委任プロトコルという用語。

委任が重要な理由は何ですか?アプリケーションのライフサイクルのある時点で、あるクラスがそのデリゲートにメッセージを送り(これはnilではない)、特定のメソッドを実装している(そのセレクタに応答することができます)場合、メッセージはそのデリゲートによって受信されます。この時点で、コントロールは、何らかの計算を実行するデリゲートによってキャプチャされ、多分何らかの結果を返すことができます。

希望します。

+0

それは多くの仲間を助けました。 –

1

委任のアイデアは、何らかの操作が行われたり、何かが行われたり、操作を行うために別のオブジェクトに通知したり、データを取得したりする必要がある場合と同じです。 テーブルビューでは、データソースからリストを取得し、オブジェクトが選択されたときに誰かに通知する必要があります。つまり、データソースを設定し、テーブルビューがメソッドを呼び出すオブジェクトです。対応して実装されているプロトコルで定義されています。

(uはそのプロトコルの中に何かを必要とし、このデリゲートの話のように)私は、この非公式の説明は、デリゲートの詳細(適切な)情報のため

をあなたを役に立てば幸いチェック:http://en.wikipedia.org/wiki/Delegation_pattern

1

一般的に、そのです「仕事をする」オブジェクト。

NSXMLParserの場合、パーサーを作成するときにオブジェクトをその委任者に設定すると、このオブジェクトはNSXMLParsedDelegateメソッドを実装する必要があります。例えば

- (void) parseData:(NSData*) xmlResponse; 

- (void)parserDidStartDocument:(NSXMLParser *)parser; 

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError; 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict; 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName; 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string; 

- (void)parserDidEndDocument:(NSXMLParser *)parser; 
+0

ありがとうDude .. NSXMLParsingの場合にそれを忘れました.. –

関連する問題