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

代碼其實很簡單,回頭擼一個。