サーチ…


備考

プロトコルデリゲートは、2つの関連していますが異なる概念です。

プロトコルとは、クラスが準拠することができるインタフェースです。つまり、クラスは、リストされたメソッドを実装します。

デリゲートは、通常、プロトコルに準拠した匿名オブジェクトです。

Delegationと呼ばれるDelegateのアプリケーションは設計パターンです。

一方の端には継承という概念があり、サブクラスとそのスーパークラスの間に緊密な結合が作成されますが、 委譲の設計パターンは、この緊密な結合を避けるための代替手段を提供し、匿名の委任オブジェクトに基づいて、

プロトコルと委任メカニズムの実装。

ViewAViewB 2つのビューがあるとします

インスタンスViewB内部で作成されViewAので、 ViewAにメッセージを送ることができますViewB'sインスタンスが、その逆のために(デリゲート使用するように、我々は委任を実装する必要が起こることViewB'sインスタンスはにメッセージを送ることができViewA

委任を実装するには、次の手順に従います

  1. ViewBプロトコルをViewBように作成します。

     @protocol ViewBDelegate 
    
    -(void) exampleDelegateMethod;
    
     @end
    
  2. デリゲートを送信者クラスで宣言する

     @interface ViewB : UIView
     @property (nonatomic, weak) id< ViewBDelegate > delegate;
     @end
    
  3. クラスViewAでプロトコルを採用

    @interfac ViewA: UIView < ViewBDelegate >

  4. デリゲートを設定する

    -(void) anyFunction   
    {
        // create Class ViewB's instance and set the delegate
        [viewB setDelegate:self];
    }
    
  5. ViewAクラスでデリゲートメソッドを実装する

    -(void) exampleDelegateMethod
    {
        // will be called by Class ViewB's instance
    }
    
  6. ViewBクラスのメソッドを使用して、デリゲートメソッドを

    -(void) callDelegateMethod
    {
        [delegate exampleDelegateMethod];
        //assuming the delegate is assigned otherwise error
    }
    


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow