IOS上的協議相似於C#、Java上面的接口,他是從類中抽出來的一系列方法,但方法的實現是在實現這個協議的類中,任何實現這個協議的類都須要實現協議類中的@require方法; 設計模式
委託是一種設計模式,是一種設計思想。 ui
可是在IOS上面委託常常依託協議來實現(但並非必須的)。一個很好的例子就是老闆和祕書:老闆要經營企業須要對新員工培訓、對公司管理、打電話、發薪水等工做,可是對應老闆來講一些事情例如打電話、發薪水的工做能夠經過祕書來作,老闆本身只負責對員工培訓、公司管理,別的事情委託給祕書來作。委託思想就是在這種相似狀況下產生的。 atom
再說一下爲何IOS上面的委託常常依賴協議來實現?就像老闆須要一個會打電話、發薪水的祕書來減輕老闆本身的工做,可是老闆並不知道誰有這兩項技能,那老闆就會發一個招聘,招聘會這兩項技能的人。但老闆怎樣知道應聘人員會這兩項技能那,老闆會經過你的學歷和工做經驗判斷應聘人員是否會這兩項技能;可是對於程序來講,在不知道這個類的內部狀況下怎樣知道這個類是否是能夠委託,評判標準是啥?這個時候若是一個類實現一個有這兩項技能的協議,則能很容易判斷出這個類具備這兩項技能。這個就是IOS上面爲何委託常常和協議一塊用。 設計
例子待續... code
協議 對象
#import <Foundation/Foundation.h> //協議是從類抽出的一些方法,如何實現這個協議的類都須要實現這裏面的方法 @protocol SecProtocol <NSObject> @required //發工資 - (void)payoff; //打電話 - (void)tel; @optional @endBoss
#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
#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]; } @endSec
#import <Foundation/Foundation.h> #import "SecProtocol.h" // 祕書類,實現協議, 委託對象 @interface Sec : NSObject<SecProtocol> @end
#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調用方法
Boss *boss = [[Boss alloc] init];//委託人 Sec *sec = [[Sec alloc] init];//委託對象,實現了必定協議的對象 boss.delegate = sec;//將委託對象複製給委託人裏面的委託對象 [boss teach]; [boss manage]; [boss tel]; [boss payoff];