<原創(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 賦值....
2.API:只有代理 實現(xiàn)協(xié)議,delegate. 以及多代理時 使用的監(jiān)聽,與移除監(jiān)聽方法.
3.設(shè)置 代理
4.代理對象 簽訂協(xié)議(當(dāng)然你不簽訂也可以,程序員無視警告!)
5.分別 實現(xiàn)協(xié)議方法,以及在初始化方法中,調(diào)用 block 監(jiān)聽方法.
在 dealloc 時移除 block 監(jiān)聽
6.通過單例來觸發(fā)事件.把輸入框當(dāng)中的文本傳遞給 delegate 以及block中
7.設(shè)置代理時,要保存 每一個delegate 對象,這里要注意,保存代理 為了防止容器當(dāng)中的對象被 retain ,導(dǎo)致對象不釋放.要采用
NSPointerArray
來做容器,弱引delegate 對象
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技巧.