問題一: 代理, 通知, block區(qū)別是什么
通知
- 使用
觀察者模式來實(shí)現(xiàn)用于跨層傳遞消息機(jī)制 - 傳遞方式一對多
- 沒有回調(diào)
代理
- 使用
代理模式來實(shí)現(xiàn)傳遞 - 傳遞方式
一對一 - 需要創(chuàng)建協(xié)議
- 協(xié)議和實(shí)現(xiàn)是分開的,可讀性差,可維護(hù)性高
- 運(yùn)行成本低, 消耗少
- 可以回調(diào)
block
- 本質(zhì)是
OC對象 - 傳遞方式
一對一 - 比較簡便,快捷,可讀性好一些
- 效率高 (block效率高是因?yàn)閎lock是內(nèi)聯(lián))
- 運(yùn)行成本高 (當(dāng)block出棧時,會將使用的數(shù)據(jù)從
棧內(nèi)存拷貝到堆內(nèi)存,對象引用計數(shù)+1,導(dǎo)致運(yùn)行成本高) - 可以回調(diào)
問題二: 描述下通知一對多的流程

通知一對多的流程
發(fā)送者(代碼實(shí)現(xiàn)是postnotification方法調(diào)用)經(jīng)由通知中心廣播給其他觀察者
問題三: 通知的實(shí)現(xiàn)機(jī)制或者讓你設(shè)計實(shí)現(xiàn)通知機(jī)制

通知機(jī)制
- 通知中心內(nèi)部維護(hù)一張通知表
- 通知表以通知名稱NotificationName做key, 以觀察者集合Observer做value
- Observer數(shù)組列表, 包含通知接收觀察者, 回調(diào)方法等相關(guān)數(shù)據(jù)信息