IOS 委托和协议区别和联系 (-)
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
IOS 委托和協(xié)議區(qū)別和聯(lián)系 (-)
IOS上的協(xié)議類似于C#、Java上面的接口,他是從類中抽出來(lái)的一系列方法,但方法的實(shí)現(xiàn)是在實(shí)現(xiàn)這個(gè)協(xié)議的類中,任何實(shí)現(xiàn)這個(gè)協(xié)議的類都需要實(shí)現(xiàn)協(xié)議類中的@require方法;?
委托是一種設(shè)計(jì)模式,是一種設(shè)計(jì)思想。?
但是在IOS上面委托經(jīng)常依托協(xié)議來(lái)實(shí)現(xiàn)(但并不是必須的)。一個(gè)很好的例子就是老板和秘書(shū):老板要經(jīng)營(yíng)企業(yè)需要對(duì)新員工培訓(xùn)、對(duì)公司管理、打電話、發(fā)薪水等工作,但是對(duì)應(yīng)老板來(lái)說(shuō)一些事情例如打電話、發(fā)薪水的工作可以通過(guò)秘書(shū)來(lái)做,老板自己只負(fù)責(zé)對(duì)員工培訓(xùn)、公司管理,別的事情委托給秘書(shū)來(lái)做。委托思想就是在這種類似情況下產(chǎn)生的。?
再說(shuō)一下為什么IOS上面的委托經(jīng)常依賴協(xié)議來(lái)實(shí)現(xiàn)?就像老板需要一個(gè)會(huì)打電話、發(fā)薪水的秘書(shū)來(lái)減輕老板自己的工作,但是老板并不知道誰(shuí)有這兩項(xiàng)技能,那老板就會(huì)發(fā)一個(gè)招聘,招聘會(huì)這兩項(xiàng)技能的人。但老板怎樣知道應(yīng)聘人員會(huì)這兩項(xiàng)技能那,老板會(huì)通過(guò)你的學(xué)歷和工作經(jīng)驗(yàn)判斷應(yīng)聘人員是否會(huì)這兩項(xiàng)技能;但是對(duì)于程序來(lái)說(shuō),在不知道這個(gè)類的內(nèi)部情況下怎樣知道這個(gè)類是不是可以委托,評(píng)判標(biāo)準(zhǔn)是啥?這個(gè)時(shí)候如果一個(gè)類實(shí)現(xiàn)一個(gè)有這兩項(xiàng)技能的協(xié)議,則能很容易判斷出這個(gè)類具有這兩項(xiàng)技能。這個(gè)就是IOS上面為什么委托經(jīng)常和協(xié)議一塊用。?
例子待續(xù)...?
協(xié)議?
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #import <Foundation/Foundation.h> //協(xié)議是從類抽出的一些方法,如何實(shí)現(xiàn)這個(gè)協(xié)議的類都需要實(shí)現(xiàn)這里面的方法 @protocol SecProtocol <NSObject> @required //發(fā)工資 - ( void )payoff; //打電話 - ( void )tel; @optional @end |
Boss?
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #import <Foundation/Foundation.h> #import "SecProtocol.h" //委托人 @interface Boss : NSObject @property (nonatomic, retain) id<SecProtocol> delegate; //管理 - ( void )manage; //教導(dǎo)新員工 - ( void )teach; //打電話 - ( void )tel; //發(fā)工資 - ( void )payoff; @end |
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #import "Boss.h" @implementation Boss @synthesize delegate; - (id)init{ ???? self = [super init]; ???? if (self) { ????????? ???? } ???? return self; } - ( void )manage{ ???? NSLog(@ "boss manage" ); } - ( void )teach{ ???? NSLog(@ "boss teach" ); } - ( void )payoff{ ???? [self.delegate payoff]; } - ( void )tel{ ???? [self.delegate tel]; } @end |
Sec?
?
| 1 2 3 4 5 6 | #import <Foundation/Foundation.h> #import "SecProtocol.h" // 秘書(shū)類,實(shí)現(xiàn)協(xié)議, 委托對(duì)象 @interface Sec : NSObject<SecProtocol> @end |
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #import "Sec.h" @implementation Sec - (id)init{ ???? self = [super init]; ???? if (self) { ????????? ???? } ???? return self; } - ( void )payoff{ ???? NSLog(@ "sec payoff!" ); } - ( void )tel{ ???? NSLog(@ "sec tel" ); } @end |
調(diào)用方法?
?
| 1 2 3 4 5 6 7 8 9 | Boss *boss = [[Boss alloc] init]; //委托人 ???? Sec *sec = [[Sec alloc] init]; //委托對(duì)象,實(shí)現(xiàn)了一定協(xié)議的對(duì)象 ???? boss.delegate = sec; //將委托對(duì)象復(fù)制給委托人里面的委托對(duì)象 ????? ???? [boss teach]; ???? [boss manage]; ????? ???? [boss tel]; ???? [boss payoff]; |
轉(zhuǎn)載于:https://my.oschina.net/fadoudou/blog/516171
總結(jié)
以上是生活随笔為你收集整理的IOS 委托和协议区别和联系 (-)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据库日志管理
- 下一篇: 几个经常需要自定义的View总结