IOS委託とプロトコルの区別と連絡(-)
2795 ワード
IOS上のプロトコルはC#、Java上のインタフェースに似ており、クラスから抽出された一連のメソッドであるが、メソッドの実装はこのプロトコルを実装するクラスであり、このプロトコルを実装するクラスはいずれもプロトコルクラスの@requireメソッドを実装する必要がある.
依頼は設計モデルであり、設計思想である.
しかしIOS上ではプロトコルに頼って実現を依頼することが多い(ただし必須ではない).1つのとても良い例はボスと秘書です:ボスが企業を経営するには新入社員の育成訓練、会社の管理、電話、給料などの仕事が必要ですが、ボスにとっていくつかのこと、例えば電話、給料の仕事は秘書を通じてすることができます.ボスは自分で従業員の育成訓練、会社の管理だけを担当して、他のことは秘書に委託します.依頼思想はこのような状況で生まれた.
それになぜIOS上の依頼はプロトコルに依存して実現されるのか.ボスが電話をかけたり、給料をもらったりする秘書が必要で、ボスの自分の仕事を軽減するように、ボスは誰がこの2つのスキルを持っているのか分からないので、ボスは求人を出して、この2つのスキルを持っている人を募集します.しかし、ボスはどのように応募者がこの2つの技能を知っていますか.それでは、ボスはあなたの学歴と仕事の経験を通じて応募者がこの2つの技能を持っているかどうかを判断します.しかし、プログラムにとって、このクラスの内部状況が分からない場合、このクラスが依頼できるかどうか、評価基準は何ですか?このとき,1つのクラスがこの2つのスキルを持つプロトコルを実現すれば,このクラスがこの2つのスキルを持っていると容易に判断できる.これがIOS上でなぜ依頼がよくプロトコルと一緒に使われるのかということです.
例は続きます...
プロトコル
依頼は設計モデルであり、設計思想である.
しかしIOS上ではプロトコルに頼って実現を依頼することが多い(ただし必須ではない).1つのとても良い例はボスと秘書です:ボスが企業を経営するには新入社員の育成訓練、会社の管理、電話、給料などの仕事が必要ですが、ボスにとっていくつかのこと、例えば電話、給料の仕事は秘書を通じてすることができます.ボスは自分で従業員の育成訓練、会社の管理だけを担当して、他のことは秘書に委託します.依頼思想はこのような状況で生まれた.
それになぜIOS上の依頼はプロトコルに依存して実現されるのか.ボスが電話をかけたり、給料をもらったりする秘書が必要で、ボスの自分の仕事を軽減するように、ボスは誰がこの2つのスキルを持っているのか分からないので、ボスは求人を出して、この2つのスキルを持っている人を募集します.しかし、ボスはどのように応募者がこの2つの技能を知っていますか.それでは、ボスはあなたの学歴と仕事の経験を通じて応募者がこの2つの技能を持っているかどうかを判断します.しかし、プログラムにとって、このクラスの内部状況が分からない場合、このクラスが依頼できるかどうか、評価基準は何ですか?このとき,1つのクラスがこの2つのスキルを持つプロトコルを実現すれば,このクラスがこの2つのスキルを持っていると容易に判断できる.これがIOS上でなぜ依頼がよくプロトコルと一緒に使われるのかということです.
例は続きます...
プロトコル
#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];