IOS 委託和協議區別和聯繫 (-)

IOS上的協議相似於C#、Java上面的接口,他是從類中抽出來的一系列方法,但方法的實現是在實現這個協議的類中,任何實現這個協議的類都須要實現協議類中的@require方法; 設計模式

委託是一種設計模式,是一種設計思想。 ui

可是在IOS上面委託常常依託協議來實現(但並非必須的)。一個很好的例子就是老闆和祕書:老闆要經營企業須要對新員工培訓、對公司管理、打電話、發薪水等工做,可是對應老闆來講一些事情例如打電話、發薪水的工做能夠經過祕書來作,老闆本身只負責對員工培訓、公司管理,別的事情委託給祕書來作。委託思想就是在這種相似狀況下產生的。 atom

再說一下爲何IOS上面的委託常常依賴協議來實現?就像老闆須要一個會打電話、發薪水的祕書來減輕老闆本身的工做,可是老闆並不知道誰有這兩項技能,那老闆就會發一個招聘,招聘會這兩項技能的人。但老闆怎樣知道應聘人員會這兩項技能那,老闆會經過你的學歷和工做經驗判斷應聘人員是否會這兩項技能;可是對於程序來講,在不知道這個類的內部狀況下怎樣知道這個類是否是能夠委託,評判標準是啥?這個時候若是一個類實現一個有這兩項技能的協議,則能很容易判斷出這個類具備這兩項技能。這個就是IOS上面爲何委託常常和協議一塊用。 設計

例子待續... code

協議 對象

#import <Foundation/Foundation.h>

//協議是從類抽出的一些方法,如何實現這個協議的類都須要實現這裏面的方法
@protocol SecProtocol <NSObject>

@required
//發工資
- (void)payoff;
//打電話
- (void)tel;

@optional

@end
Boss
#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];
}
@end
Sec
#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];
相關文章
相關標籤/搜索