我們知道 delegate 這種通信方式是一對一的,比如我們有一個 IM Manager,它主要負責連接、斷開連接、接收消息等。有一個 VC 會根據這些事件來顯示不同的狀態,那么我們會想到用 delegate 的方式來解決,即將 VC 作為 IM Manager 的代理。但是如果有多個 VC 都關心這些事件呢?delegate 這種一對一形式的通信肯定是不成了,我們會想到 Notification 這種一對多的通信,但是它會導致在所有 VC 中都要寫很多重復添加觀察者的代碼,而且它解決不了觀察者回傳數據的功能,即數據流向只能是從被觀察者到觀察者的單向數據傳輸。
那如何解決我們的需求呢?我們可以抽象出一個中間層,這個中間層作為 IM Manager 的代理,而多個 VC 作為中間層的代理,中間層收到事件通知后,通過消息轉發機制通知每個代理。這個中間層就叫做多播代理。
代碼其實很簡單,回頭擼一個。