關(guān)于iOS多重代理的實(shí)現(xiàn)(實(shí)現(xiàn)一對多的通知效果)

因?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的代理方法。

Demo

歡迎下方評論,給star謝謝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,621評論 1 32
  • 1.設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式,并簡要敘述? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn),就是用比較成熟的邏輯去處理某一種類...
    司馬DE晴空閱讀 1,458評論 0 7
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,302評論 6 13
  • OC的理解與特性 OC作為一門面向?qū)ο蟮恼Z言,自然具有面向?qū)ο蟮恼Z言特性:封裝、繼承、多態(tài)。它既具有靜態(tài)語言的特性...
    小樓昨夜有風(fēng)雨閱讀 617評論 0 0
  • 不知不覺21天就過去了,實(shí)際上是不止21天,因?yàn)橹虚g還有幾個(gè)星期六星期天。 人說21天就可以養(yǎng)成一個(gè)習(xí)慣,那么每天...
    素北寫稿閱讀 333評論 1 1

友情鏈接更多精彩內(nèi)容