1. 程式人生 > >iOS多播Delegate類——GCDMulticastDelegate用法小結

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> *)[[GCDMulticastDelegate

alloc] 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呼叫協議方法時,採用的是非同步的方式,協議方法會立刻返回,不會阻礙當前函式。

相關推薦

iOSDelegate——GCDMulticastDelegate用法小結

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

C#中委託(delegate)和委託的理解

委託 委託是定址方法的.NET版本。 什麼是定址方法? 簡單理解為我們通過委託傳遞一個方法給另一個方法。 什麼時候需要傳遞方法? 在微軟的官方文件和C#高階程式設計(第七版)這本書都提到一個例子-----在物件的排序演算法中,需要對物件進行比較,而不同物件比較

iOS開發-iOS執行緒開發中踩過的坑-GCD的特性-NSOperation執行緒依賴-iOS執行緒踩坑小結

本期內容: iOS開發中從其他執行緒回到主執行緒的方法 dispatch_group_create 組的概念 dispatch_sync同步排程主執行緒會死鎖的原因 專案中什麼時候選擇GCD什麼時候選擇NSOperation NSOperation 執行緒依賴

iOS中的delegate用法和規範

delegate是Objective-C編寫的應用中各種物件之間互相呼叫的主要方式之一. 通常情況下, 物件可以接收的訊息都通過在介面檔案中宣告的方法來表示. @protocol MyProtocol <NSObject> - (void)func; @en

Delegate 概念 與MVC模式不同,model/view結構沒有用於與使用者互動的完全獨立的元件。一般來講, view負責把資料展示給使用者,也處理使用者的輸入。為了獲得更的靈性性,互動通過d

Delegate  類 概念 與MVC模式不同,model/view結構沒有用於與使用者互動的完全獨立的元件。一般來講, view負責把資料展示給使用者,也處理使用者的輸入。為了獲得更多的靈性性,互動通過delegagte執行。它既提供輸入功能又負責渲染view中的每個

String詳細用法小結

public final class Stringextends Objectimplements Serializable, Comparable<String>, CharSequence String 類代表字串。Java 程式中的所有字串字面值(如 "

iOS執行緒小結( NSOperation)

一) NSOperation使用方法: NSOperation 例項封裝了需要執行的操作和執行操作所需的資料,並且能夠以併發或非併發的方式執行這個操作。NSOperation在ios4後也基於GCD實現,但是相對於GCD來說可控性更強,並且可以加入操作依賴。N

使用藍圖(Blueprint)繫結委託(Multicast Delegate)【UE4】【C++】

本例將講解 如何在 C++ 中建立一個多播委託,然後在執行時通知一組的 Actors(即廣播事件給監聽事件的物件們)首先建立一個 繼承自 StaticMeshActor 的類,命名為 KingKing.h// the type name of new delegate sig

ios線程操作(四)—— GCD核心概念

indent img 操作 fort 16px 2.0 b2c 有一種 read GCD全稱Grand Central Dispatch。可譯為“大派發中樞調度器”,以純C語言寫成,提供了很多很強大的函數。GCD是蘋果公司為多核的並行運算提出的解決方式,它能夠自己主

《網絡編程》廣播和

多個 配置過程 client 數據報 一個 term 所在 總結 網上 概述 主機可採用的通信方式有例如以下三種: 單播:單臺主機與單臺主機之間的數據通信;廣播:單臺主機向網絡中全部主機發送數據報的過程;多播:單臺主機向選定的一組主機發送數據報的過程;

條款7:為態基析構函數聲明為virtual

是你 避免 class 基類 多態 聲明 ase delet 必須 基類指針指向子類對象。 子類對象必須位於堆。因此為了避免泄漏內存資源,當指針不使用時,delete掉每一個對象非常重要。但是如果基類的析構函數不聲明為virtual。那麽指向子類對象的指針delete時,析

windows編程 使用C++實現線程

size ring oid rime 業務 res rim .net 通知 有時候我們想在一個類中實現多線程,主線程在某些時刻獲得數據,可以“通知”子線程去處理,然後把結果返回。下面的實例是主線程每隔2s產生10個隨機數,將這10隨機數傳給多線程類,讓它接收到數據後馬上打印

iOS線程---GCD中線程的通信

獲取 bsp blog global col object ios多線程 nts load 在子線程的任務完成後,有時候需要從子線程回到主線程,刷新UI。 從子線程中回到主線程,以前已經寫過一種方法: [self.imageView performSelectorO

關於expdp 中query用法小結

oracle query expdp 今天看到群裏有人問到關於在使用expdp導出數據中使用query參數報錯的解決方法,自己也出於好奇心瞎折騰了一把,現記錄如下 1.第一次嘗試的時候[[email protected]/* */ ~]$ expdp scott/scott t

iOS線程---NSOperation介紹和使用

star cati log 對象 sop exec 使用 sin 方式 1. NSOperation實現多線程編程,需要和NSOperationQueue一起使用。 (1)先將要執行的操作封裝到NSOperation中 (2)將NSOperation對象添加到NSOper

iOS線程---NSOperation的常用操作

自動 最大並發數 com str 需要 循環 單個 監聽 sin 1.最大並發數: - (NSInteger)maxConcurrentOperationCount;- (void)setMaxConcurrentOperationCount:(NSInteger)cnt;

iOS線程開發之離不開的GCD(上篇)

sop 先進先出 調度 事件 實現 說明 優先級 子線程 函數 一、GCD基本概念 GCD 全稱Grand Central Dispatch(大中樞隊列調度),是一套低層API,提供了?種新的方法來進?並發程序編寫。從基本功能上講,GCD有點像NSOperatio

iOS線程開發之GCD(下篇)

num 不能 每次 自定義 left void 類型 c函數 current 上篇和中篇講解了什麽是GCD,如何使用GCD,這篇文章將講解使用GCD中將遇到的死鎖問題。有興趣的朋友可以回顧《iOS多線程開發之GCD(上篇)》和《iOS多線程開發之GCD(中篇)》。

Object用法和作用

object類 用法 方法 屬性 getc 個人 返回 字符串 tcl 一: 現實世界中, 每個人都有自己的父親。類也是這樣,每個類都有一個父類,這個父類是 java.lang.Object。 因此,隨意創建一個類,其實也不是空的,起碼這個類中有Object類中的屬性和方法