iOS 奇淫技巧之<多代理,多block傳值>

<原創(chuàng)>
由于某種需求,我們的項目中要使用到,一對多的傳值.第一反應(yīng)當(dāng)然是,消息通知了.但是 個人感覺 太low.
所以 想到 以前用XMPP寫即時通訊時,大神的SDK里,代理是可以一對多的,所以我追尋神的腳步,也就有了這篇blog.
消息通知,代理,以及block.這三中方式,優(yōu)缺點我不做評價.有經(jīng)驗的人會根據(jù)業(yè)務(wù)需求去選擇適合自己的方式.

1.效果演示: 把輸入框里面的 文本 通過 多代理 給每一個 cell 的label 賦值.
delegate->前綴;
是通過多代理方式賦值.
block->前綴;
是通過多block 方式賦值.
然后跳轉(zhuǎn)到另一個控制器 把另一個文本的 文字,傳給其他 接受多代理,以及多block 的對象當(dāng)中.也就是給首界面的 cell 賦值....


duodaili2.gif

2.API:只有代理 實現(xiàn)協(xié)議,delegate. 以及多代理時 使用的監(jiān)聽,與移除監(jiān)聽方法.


duodaili3.png

3.設(shè)置 代理


duodaili4.png

4.代理對象 簽訂協(xié)議(當(dāng)然你不簽訂也可以,程序員無視警告!)


duodaili5.png

5.分別 實現(xiàn)協(xié)議方法,以及在初始化方法中,調(diào)用 block 監(jiān)聽方法.
在 dealloc 時移除 block 監(jiān)聽


duodaili6.png

6.通過單例來觸發(fā)事件.把輸入框當(dāng)中的文本傳遞給 delegate 以及block中


duodaili7.png

7.設(shè)置代理時,要保存 每一個delegate 對象,這里要注意,保存代理 為了防止容器當(dāng)中的對象被 retain ,導(dǎo)致對象不釋放.要采用
NSPointerArray
來做容器,弱引delegate 對象


duodaili8.png

8.多block.m實現(xiàn) 將block 做為value 存入字典當(dāng)中.delegate對象通過hash轉(zhuǎn)成 NSString 當(dāng)做Key 緩存起來,當(dāng)對象釋放的時候可以再次調(diào)用

  • (void)removeObserver:(id)delegate;
    從緩存當(dāng)中移除 鍵值對.


    duodaili9.png

附上Demo下載地址:
https://github.com/yangyangFeng/iOS-More-delegate

好了以上就是 iOS 實戰(zhàn)開發(fā)當(dāng)中 的 多代理,以及多block 傳值.
其實好處很多,比如我在購物車當(dāng)中 使用 多代理,不用每次 +-數(shù)量的時候來刷新 tableView ,或者用消息通知來通知每一個 cell 來更新數(shù)據(jù).逼格太low.
勵志成為一名寫出高逼格代碼的程序員的我,是不允許這么做的!!!

本次裝13,到此結(jié)束!
轉(zhuǎn)載請注明出處,喜歡請給我個星,鼓勵我繼續(xù)研究奇淫技巧.!

如果有新的好點子,改進(jìn)歡迎指正.交流技術(shù),分享裝13技巧.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容