delegate介紹
delegation委托其實(shí)也是一種架構(gòu)設(shè)計(jì)模式,主要是由一個(gè)委托對(duì)象委托給另一個(gè)對(duì)象去做它的工作。這里面需要用protocol協(xié)議實(shí)現(xiàn),協(xié)議有requested必要方法,和option可選方法兩種,協(xié)議提供編程接口,給調(diào)用者實(shí)現(xiàn)協(xié)議中的方法。
一張圖解釋delegate
使用delegation的場(chǎng)景:
實(shí)現(xiàn)不同頁(yè)面間的數(shù)據(jù)交互,可以用在頁(yè)面跳轉(zhuǎn),界面?zhèn)髦?,跳轉(zhuǎn)頁(yè)面刷新數(shù)據(jù)以及監(jiān)聽事件等等,當(dāng)delegate的事件觸發(fā)時(shí),delegate才會(huì)被調(diào)用。
使用delegation的通用步驟:
- 首先要?jiǎng)?chuàng)建一個(gè)delegate對(duì)象,使用protocol協(xié)議定義需要委托的方法接口
- 然后委托者要在自身文件里要聲明一個(gè)delegate對(duì)象
- 委托者回調(diào)delegate的協(xié)議方法(自身調(diào)用自身)
- 設(shè)置被委托者的delegate,用來(lái)被委托者調(diào)用協(xié)議方法(即delegate內(nèi)的方法)
- 最后被委托者要實(shí)現(xiàn)delegate的協(xié)議方法,實(shí)現(xiàn) delegate
使用delegate的幾個(gè)注意點(diǎn):
- 聲明的delegate對(duì)象的屬性要使用weak,用來(lái)防止循環(huán)引用,因?yàn)閷?duì)象的delegate持有對(duì)象本身。
- 要檢查@option方法有沒有實(shí)現(xiàn),使用respondToselector:
- 命名最好以delegate的類名開頭,然后加上should,will,did
(委托方法通常包括3種動(dòng)詞:should、will、did
should表示一個(gè)動(dòng)作發(fā)生前,通常帶有返回值,可以在動(dòng)作發(fā)生之前改變對(duì)象狀態(tài)。
will在動(dòng)作發(fā)生前,委托可以對(duì)動(dòng)作做出響應(yīng),但不帶有返回值。
did在動(dòng)作發(fā)生后做出的響應(yīng)。)