代理
概念:
一種通用的設(shè)計模式,在iOS中對代理設(shè)計模式支持的很好俺夕,有特定的語法來實現(xiàn)代理模式腾降,OC語言可以通過@Protocol實現(xiàn)協(xié)議系洛。
使用:
iOS中一種消息傳遞的方式,可以通過這種方式來傳遞一些參數(shù) .
代理的三部分組成:
協(xié)議: 指定雙方(代理方,委托方)必須做什么?
代理: 實現(xiàn) 委托方需要的幫助 ?? (根據(jù)指定的協(xié)議)
委托: 告訴代理我需要哪些幫助?? (根據(jù)指定的協(xié)議)
所以這里,雙方都需要遵守協(xié)議
協(xié)議 Protocol
:
如上圖 , 可知道三方之間的關(guān)系 , 在實際應(yīng)用中通過協(xié)議來規(guī)定代理雙方的行為 ; 協(xié)議中的內(nèi)容一般都是 方法列表 搪桂,當然也可以定義 屬性 ; 協(xié)議的定義( 即書寫的方式) 可以是在某一個類里面 , 也可以是單獨拿出來作為一個單獨的文件 (當多個類使用該協(xié)議的時候) ; 就像 UITableView 那樣 從 UIScrollView 那繼承 過來代理方法: 可以獲取 UITableView 偏移量等狀態(tài)參數(shù) ; 協(xié)議只能作為一套公用的接口而存在 , 起到約束代理方和委托方的作用 , 不能實現(xiàn)具體方法 , 只能交給代理方實現(xiàn)(在委托方具體情況下傳過來需要實現(xiàn)的消息 ) ; 并且 協(xié)議可以多繼承--繼承其他多個協(xié)議 (對象不可以)
注意:
在委托方調(diào)用代理方法時都需要做一個判斷透敌,判斷代理是否實現(xiàn)當前方法,否則會導致崩潰踢械。
制定協(xié)議:
@protocol LoginProtocol
- (void)userLoginWithUsername:(NSString *)username password:(NSString *)password;
@end
委托方調(diào)用代理方法時需要做個判斷:
if ( [ self.delegate responseToSelector : @selector ( userLoginWithUsername: password: ) ] ) {
[ self.delegate userLoginWithUsername: self.username.text password: self.password.text ] ;
}
實際生活中的例子去理解這個概念:
示例:假設(shè)我在公司正在敲代碼酗电,敲的正開心呢,突然口渴了内列,想喝一瓶紅茶撵术。這時我就可以拿起手機去外賣app上定一個紅茶,然后外賣app就會下單給店鋪并讓店鋪給我送過來话瞧。
這個過程中嫩与,外賣app就是我的代理,我就是委托方交排,我買了一瓶紅茶并付給外賣app錢划滋,這就是購買協(xié)議。我只需要從外賣app上購買就可以埃篓,具體的操作都由外賣app去處理处坪,我只需要最后接收這瓶紅茶就可以。我付的錢就是參數(shù)都许,最后送過來的紅茶就是處理結(jié)果稻薇。
但是我買紅茶的同時,我還想吃一份必勝客披薩胶征,我需要另外向必勝客app去訂餐塞椎,上面的外賣app并沒有這個功能。我又向必勝客購買了一份披薩睛低,必勝客當做我的代理去為我做這份披薩案狠,并最后送到我手里服傍。這就是多個代理對象,我就是委托方骂铁。
更深一點的知識關(guān)于代理 可以點擊下 原文鏈接??