因?yàn)橥ㄖ囊粚Χ鄬?shí)現(xiàn)會(huì)產(chǎn)生內(nèi)存泄漏、耦合關(guān)系太離散等一系列問題,有了想用代理實(shí)現(xiàn)一對多的方式通知。
首先,我們要滿足的條件是多處服從協(xié)議的類實(shí)現(xiàn)代理方法
在觸發(fā)其中一個(gè)代理,及即觸發(fā)其他同一實(shí)現(xiàn)了的代理方法。
即完成了一對多的實(shí)現(xiàn)。
基本思路如下圖所示:

其中兩個(gè)關(guān)鍵點(diǎn)在于
1、協(xié)議名稱和對象構(gòu)成的一個(gè)鍵值對,形成1-1對應(yīng)關(guān)系
2、NSPointerArray的使用,使得弱引用對象,且在對象釋放時(shí)自動(dòng)刪除NSPointerArray中的元素。當(dāng)然這里也可以使用NSHashTable有一樣的效果。
其實(shí)這里可以變成多對多的方式,而且在協(xié)議名重復(fù)也不會(huì)混淆。
Demo中包含的例子。
ViewController中代理了TestView中的TestViewDelegate
ButtonView中的TestViewDelegate
SViewController中代理TestView中的TestViewBtnDelegate
ThirdViewController中代理了TestView中的TestViewDelegate
TestView中的TestViewBtnDelegate
所以在點(diǎn)擊TestView紅色區(qū)域時(shí),實(shí)現(xiàn)的ViewController和ThirdViewController中的TestViewDelegate的代理方法。
點(diǎn)擊藍(lán)色區(qū)域?qū)崿F(xiàn)的是SViewController和ThirdViewController的代理方法。
歡迎下方評論,給star謝謝。