1

誰かがこの構文が<>括弧付きのMenuDelegateによって何をするか知っていますか?そして、なぜ誰かがこのようなコードを複雑にしたいのでしょうか。

@protocol MenuDelegate
    - (void)optionSelected:(NSString *)option;
@end

@interface ContentMenu : UITableViewController {
    NSMutableArray *_test;
    id<MenuDelegate> _delegate;
}

ありがとう

4

4 に答える 4

0

プロトコルについてAppleのドキュメントが言っていることを見る

オブジェクトのクラスがわかっている場合は、そのインターフェイス宣言(およびオブジェクトが継承するクラスのインターフェイス宣言)を調べて、オブジェクトが応答するメッセージを見つけることができます。これらの宣言は、受信できるメッセージをアドバタイズします。プロトコルは、送信するメッセージをアドバタイズする方法も提供します

コミュニケーションは双方向に機能します。オブジェクトはメッセージを送信するだけでなく、メッセージを受信します。たとえば、オブジェクトが特定の操作の責任を別のオブジェクトに委任したり、場合によっては単に別のオブジェクトに情報を要求する必要がある場合があります。場合によっては、オブジェクトが他のオブジェクトにそのアクションを通知して、必要な付随的措置を講じることができるようにすることがあります。

同じプロジェクトの一部として送信者のクラスと受信者のクラスを開発する場合(または他の誰かが受信者とそのインターフェイスファイルを提供した場合)、この通信は簡単に調整されます。送信者は、受信者のインターフェースファイルをインポートするだけです。インポートされたファイルは、送信者が送信するメッセージで使用するメソッドセレクターを宣言します。

だからこれはあなたの質問の答えです

Why not just put the optionSelected function inside @implementation?
于 2012-07-12T06:35:09.150 に答える
0

この構文は、id変数がMenuDelegateと呼ばれるプロトコルを採用することを意味します。


構文は私にも奇妙に見えますが、メソッドを呼び出す場合ほど奇妙ではありません。

于 2012-07-12T04:23:34.520 に答える
0

それがプロトコルです。Objective-Cのプロトコルはインターフェース宣言です。渡されるオブジェクトのタイプを強制することなく、デリゲートで期待する特定のメソッドのセットを指定できます。

id<MenuDelegate>MenuDelegateプロトコルを実装するクラスを意味します。MenuDelegateオブジェクトの実際のタイプを気にすることなく、プロトコルで指定された関数を呼び出すことができることを保証します。

于 2012-07-12T04:24:40.337 に答える
0

静的型付けにより、コンパイラーがクラス階層に基づいて型をテストできるように、この構文により、コンパイラーはプロトコルへの準拠に基づいて型をテストできます。詳細については、Objective-C2.0プログラミング言語を参照してください。

于 2012-07-12T05:15:04.553 に答える