IOS 委托和协议区别和联系 (-)
2019獨角獸企業重金招聘Python工程師標準>>>
IOS 委托和協議區別和聯系 (-)
IOS上的協議類似于C#、Java上面的接口,他是從類中抽出來的一系列方法,但方法的實現是在實現這個協議的類中,任何實現這個協議的類都需要實現協議類中的@require方法;?
委托是一種設計模式,是一種設計思想。?
但是在IOS上面委托經常依托協議來實現(但并不是必須的)。一個很好的例子就是老板和秘書:老板要經營企業需要對新員工培訓、對公司管理、打電話、發薪水等工作,但是對應老板來說一些事情例如打電話、發薪水的工作可以通過秘書來做,老板自己只負責對員工培訓、公司管理,別的事情委托給秘書來做。委托思想就是在這種類似情況下產生的。?
再說一下為什么IOS上面的委托經常依賴協議來實現?就像老板需要一個會打電話、發薪水的秘書來減輕老板自己的工作,但是老板并不知道誰有這兩項技能,那老板就會發一個招聘,招聘會這兩項技能的人。但老板怎樣知道應聘人員會這兩項技能那,老板會通過你的學歷和工作經驗判斷應聘人員是否會這兩項技能;但是對于程序來說,在不知道這個類的內部情況下怎樣知道這個類是不是可以委托,評判標準是啥?這個時候如果一個類實現一個有這兩項技能的協議,則能很容易判斷出這個類具有這兩項技能。這個就是IOS上面為什么委托經常和協議一塊用。?
例子待續...?
協議?
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #import <Foundation/Foundation.h> //協議是從類抽出的一些方法,如何實現這個協議的類都需要實現這里面的方法 @protocol SecProtocol <NSObject> @required //發工資 - ( 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; //教導新員工 - ( void )teach; //打電話 - ( void )tel; //發工資 - ( 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" // 秘書類,實現協議, 委托對象 @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 |
調用方法?
?
| 1 2 3 4 5 6 7 8 9 | Boss *boss = [[Boss alloc] init]; //委托人 ???? Sec *sec = [[Sec alloc] init]; //委托對象,實現了一定協議的對象 ???? boss.delegate = sec; //將委托對象復制給委托人里面的委托對象 ????? ???? [boss teach]; ???? [boss manage]; ????? ???? [boss tel]; ???? [boss payoff]; |
轉載于:https://my.oschina.net/fadoudou/blog/516171
總結
以上是生活随笔為你收集整理的IOS 委托和协议区别和联系 (-)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库日志管理
- 下一篇: 几个经常需要自定义的View总结