協(xié)議:
Objective-C 里面把方法的聲明寫在 protocol 中,并給某個類添加 id 類型的 delegate 屬性炮沐,是常見的代理模式特點座咆。
為什么要有協(xié)議 ?
通過協(xié)議的方式,我們將方法開放出去宦言,讓方法的實現(xiàn)不再受限于具體的某個類扇单,只要是遵守該協(xié)議的對象都可以實現(xiàn)協(xié)議中的方法,不同的類具有不同的實現(xiàn)該方法的方式奠旺,例如:讓一個繼承自UIView 的類來遵守 <UITableViewDelegate, UITableViewDatasource>蜘澜,并重新實現(xiàn)協(xié)議中的方法施流,就可在此類中構(gòu)建一個唯一的 “UITableView” 了。
代理:
和協(xié)議成對出現(xiàn)鄙信,可使得方法的實現(xiàn)更加靈活
代理的優(yōu)點:?
被代理的對象并不需要關(guān)心由誰來完成協(xié)議中的方法瞪醋,因為該對象不具備處理該事件的能力或不想處理該事件。而相反装诡,應(yīng)該由具備這個能力的對象來遵守這個協(xié)議银受、成為它的代理、并完成協(xié)議中的方法鸦采。這樣做的優(yōu)點是:(1)解耦宾巍,當(dāng)不指派代理的時候,原來的對象不會受到任何的影響渔伯。(2)任何遵守這個協(xié)議的對象都可以成為代理人顶霞,實現(xiàn)該對象的特有的響應(yīng)方式