代理模式的重要性:
1.A對(duì)象監(jiān)聽(tīng)B對(duì)象的一些行為(比如控制器監(jiān)聽(tīng)了footer的行為),A對(duì)象成為B對(duì)象的代理(對(duì)象就要告訴A對(duì)象一些東西)
2.A對(duì)象想告訴B對(duì)象一些事情桂躏,B對(duì)象要成為A對(duì)象的代理(比如UIScrollView告訴控制器什么時(shí)候滾動(dòng)库菲,是不是要讓控制器成為它的代理)
代理設(shè)計(jì)模式的總結(jié):
1.如果你想監(jiān)聽(tīng)別人的行為溯祸,那么就要成為別人的代理
2.如果你想告訴別人一些內(nèi)部的事情,那么就讓別人成為你的代理
代理設(shè)計(jì)模式的開(kāi)發(fā)步驟:
1.擬一份協(xié)議,(協(xié)議的格式是控件+Delegate)在協(xié)議里聲明一些代理方法(一般代理方法是@optional)
2.聲明一個(gè)代理屬性
3.在內(nèi)部發(fā)生某些行為時(shí)绽快,調(diào)用代理對(duì)應(yīng)的代理方法,通知代理內(nèi)部發(fā)生什么事(比如內(nèi)部的按鈕被點(diǎn)了紧阔,調(diào)用代理被你點(diǎn)的按鈕方法坊罢,通知代理按鈕被你點(diǎn)了)
標(biāo)記部分如果代理實(shí)行了標(biāo)記的那個(gè)方法,再去調(diào)用
4.設(shè)置代理 xxx.delegate = yyy;
5.yyy對(duì)象擅耽,遵守協(xié)議活孩,實(shí)現(xiàn)代理方法;
代理和通知的區(qū)別:
代理:1個(gè)對(duì)象只能告訴另一個(gè)對(duì)象發(fā)生了什么事
通知:1個(gè)對(duì)象可以告訴N個(gè)對(duì)象發(fā)生了什么事