iOS多播Delegate類——GCDMulticastDelegate用法小結

    iOS中一般的delegate模式只能有一個被委託的對象,這樣當須要有多個被委託的對象時,實現起來就略爲麻煩,在開源庫XMPPFramework中提供了一個GCDMulticastDelegate類,使用它能夠爲一個對象添加多個被委託的對象,用起來也比較方便,用法簡單小結以下:異步

    (1)定義一個協議:函數

  @protocol MyDelegatespa

  @optional對象

  -(void)test;get

  @endit

 

    (2)在須要使用delegate的類中定義一個GCDMulticastDelegate變量io

  

  @interface ViewController : UIViewControllerast

  {class

        GCDMulticastDelegate<MyDelegate> *multiDelegate;test

  }

 

    (3)定義多個實現了協議MyDelegate的類,如Object1和Object2;

    (4)在須要使用delegate的地方使用以下代碼,將多個被委託的對象,添加到multiDelegate的delegate鏈中。

   - (void)viewDidLoad

    {

     multiDelegate = (GCDMulticastDelegate <MyDelegate> *)[[GCDMulticastDelegatealloc] init];

      Object1 *o1 = [[Object1 alloc]init];

       Object2 *o2 = [[Object2 alloc]init];

     [multiDelegate addDelegate:o1 delegateQueue:dispatch_get_main_queue()];

     [multiDelegate addDelegate:o2 delegateQueue:dispatch_get_main_queue()];

     [multiDelegate test1];

}

     多播的delegate與一般的delegate不一樣,multiDelegate並無實現協議中的方法,而是將協議中的方法轉發到本身delegate鏈中的對象。   對multiDelegate對象調用test1方法時,因爲GCDMulticastDelegate沒有實現test1方法,所以該類的forwardInvocation函數會被觸發,在該函數中會遍歷delegate鏈,對每個delegate對象調用test1方法,從而實現了多個delegate。同時,在對multiDelegate調用協議方法時,採用的是異步的方式,協議方法會馬上返回,不會阻礙當前函數。

相關文章
相關標籤/搜索