1.一個類里面對個代理對象,同一個協(xié)議還是有可能出現(xiàn)的并不是絕對的一對一
2.降低程序耦合度(依賴性不高。)結(jié)構(gòu)層次更強
3.由代理者和委托者還有協(xié)議組成的一種設(shè)計模式
4.代理的時候必須用week或者你每次對象釋放完就必須把delegate 設(shè)置成空,否則會產(chǎn)生野指針(用assign的話就必須手動置空)
4.代理方:

Paste_Image.png
5.代理參數(shù)

Paste_Image.png
就是調(diào)用委托者已經(jīng)實現(xiàn)的代理方法(還有就是把自己當(dāng)成代理)
6.委托者
遵守代理者的協(xié)議
實現(xiàn)代理者協(xié)議里面的方法
比較
什么時候用代理什么時候用block
比如多個消息需要傳遞的時候應(yīng)該選擇代理,比較不會臃腫代碼,想Tableview封裝的就是用代理來實現(xiàn)多個方法的
代理是一個屬性只能有一個委托對象,當(dāng)需要回調(diào)多個委托對象的時候就應(yīng)該選擇用block來進(jìn)行
從性能看代理消耗小于block block涉及到堆棧的一系列操作消耗更大
代理更注重過程信息的傳輸:比如發(fā)起一個網(wǎng)絡(luò)請求,可能想要知道此時請求是否已經(jīng)開始、是否收到了數(shù)據(jù)、數(shù)據(jù)是否已經(jīng)接受完成、數(shù)據(jù)接收失敗 block注重結(jié)果的傳輸:比如對于一個事件,只想知道成功或者失敗,并不需要知道進(jìn)行了多少或者額外的一些信息