1.一個類里面對個代理對象,同一個協議還是有可能出現的并不是絕對的一對一
2.降低程序耦合度(依賴性不高。)結構層次更強
3.由代理者和委托者還有協議組成的一種設計模式
4.代理的時候必須用week或者你每次對象釋放完就必須把delegate 設置成空,否則會產生野指針(用assign的話就必須手動置空)
4.代理方:
Paste_Image.png
5.代理參數
Paste_Image.png
就是調用委托者已經實現的代理方法(還有就是把自己當成代理)
6.委托者
遵守代理者的協議
實現代理者協議里面的方法
比較
什么時候用代理什么時候用block
比如多個消息需要傳遞的時候應該選擇代理,比較不會臃腫代碼,想Tableview封裝的就是用代理來實現多個方法的
代理是一個屬性只能有一個委托對象,當需要回調多個委托對象的時候就應該選擇用block來進行
從性能看代理消耗小于block block涉及到堆棧的一系列操作消耗更大
代理更注重過程信息的傳輸:比如發起一個網絡請求,可能想要知道此時請求是否已經開始、是否收到了數據、數據是否已經接受完成、數據接收失敗 block注重結果的傳輸:比如對于一個事件,只想知道成功或者失敗,并不需要知道進行了多少或者額外的一些信息