Objective-C Language
プロトコルと代理人
サーチ…
備考
プロトコルとデリゲートは、2つの関連していますが異なる概念です。
プロトコルとは、クラスが準拠することができるインタフェースです。つまり、クラスは、リストされたメソッドを実装します。
デリゲートは、通常、プロトコルに準拠した匿名オブジェクトです。
Delegationと呼ばれるDelegateのアプリケーションは設計パターンです。
一方の端には継承という概念があり、サブクラスとそのスーパークラスの間に緊密な結合が作成されますが、 委譲の設計パターンは、この緊密な結合を避けるための代替手段を提供し、匿名の委任オブジェクトに基づいて、
プロトコルと委任メカニズムの実装。
ViewA
とViewB
2つのビューがあるとします
インスタンスViewB
内部で作成されViewA
ので、 ViewA
にメッセージを送ることができますViewB's
インスタンスが、その逆のために(デリゲート使用するように、我々は委任を実装する必要が起こることViewB's
インスタンスはにメッセージを送ることができViewA
)
委任を実装するには、次の手順に従います
ViewB
プロトコルをViewB
ように作成します。@protocol ViewBDelegate -(void) exampleDelegateMethod; @end
デリゲートを送信者クラスで宣言する
@interface ViewB : UIView @property (nonatomic, weak) id< ViewBDelegate > delegate; @end
クラスViewAでプロトコルを採用
@interfac ViewA: UIView < ViewBDelegate >
デリゲートを設定する
-(void) anyFunction { // create Class ViewB's instance and set the delegate [viewB setDelegate:self]; }
ViewA
クラスでデリゲートメソッドを実装する-(void) exampleDelegateMethod { // will be called by Class ViewB's instance }
ViewB
クラスのメソッドを使用して、デリゲートメソッドを-(void) callDelegateMethod { [delegate exampleDelegateMethod]; //assuming the delegate is assigned otherwise error }
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow