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


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

    (1)定義一個協議:

  @protocol MyDelegate

  @optional

  -(void)test;

  @end

 

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

  

  @interface ViewController : UIViewController

  {

        GCDMulticastDelegate<MyDelegate> *multiDelegate;

  }

 

    (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調用協議方法時,采用的是異步的方式,協議方法會立刻返回,不會阻礙當前函數。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM