2012-05-06 21 views
0

私はデリゲートとプロトコルのコンセプトを客観的なcで明確にしたいと思います。 だから人は、プロトコルのメソッドを定義したが、実際に両方でそれを実装していない場合はどのような正式な代理人の場合はデリゲートとプロトコルobjective

非公式 2フォーマルプロトコル 1))の2種類...があります。クラスBはAのデリゲートであり、AはオプションのメソッドWindowDidMoveを持ちます。何が行動だろうか???クラスbのデリゲート関数を実装する必要があります。私はちょうどそれを実装することはできませんし、私はどこでもそれを使用する...と逆にそれを定義することはできませんし、BまたはクラスCまたはDで別の実装を与え、それらを使用して私は...この点を明確にしてください - @class A;

@protocol ADelegate <NSObject> 
@optional 

- (BOOL)A:(A *)foo doSumfin:(BOOL)decide; 

@end 

@interface A : NSObject { 
NSString *bar; 
id <ADelegate> delegate; 
} 

@property (nonatomic, retain) NSString *bar; 

@property (nonatomic, assign) id <ADelegate> delegate; 

- (void)someAction; 

@end 

また、ライン

id <A Delegate > delegate; 

@property (nonatomic, assign) id <ADelegate> delegate; 

は、私はメソッドの実装を与え、まだしていない場合、私たちは...非公式プロトコルの場合には...

を達成何を助けるんデリゲートメソッドを呼び出す...何が起こるか?あなたのデリゲートが実装されていないデリゲートメソッドを呼び出す場合

答えて

2

、これは例外が発生します。これは非公式のプロトコルを使用してどのような方法で変更されません

if ([self.delegate respondsToSelector:@selector(someDelegateMethod:)]) { 
    [self.delegate someDelegateMethod:self]; 
} 

:デリゲートは、デリゲートがそれに応答するかどうかを最初にチェックすることによって、それらを実装している場合、オプションのデリゲートメソッドについて、あなたは通常、チェックします。非公式プロトコルとオプションのプロトコルメソッドを混同しないでください。非公式のプロトコルは、通常はNSObjectカテゴリであり、実際にはこれ以上使用するべきではありません。

+0

正式なプロトコルの場合には、シナリオ2についても解答を編集してください。異なるクラスの単一のオプションのメソッドに対して別々の実装を与えるとどうなりますか? また、プロトコルクラスと他のどこでもそれを使用したい。この点もクリアしてください –

関連する問題