0

目的 c のデリゲートとプロトコルの概念を明確にしたいと思います。したがって、プロトコルには 2 つのタイプがあります。1) 公式 2) 非公式

正式なデリゲートの場合..その人がプロトコルメソッドを定義していても、両方で実際に実装していない場合はどうなりますか? つまり、クラス B は A のデリゲートであり、A にはオプションとしてメソッド WindowDidMove があります...その場合。挙動はどうなる???クラスbでデリゲート関数を実装する必要があります。Aに実装して、好きな場所で使用することはできません...逆にAで定義せず、BまたはクラスCまたはDで個別の実装を提供し、それらを必要に応じて使用します...この点を明確にしてください– @クラス 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;

私たちが達成するのを手伝ってください..

非公式プロトコルの場合...メソッドの実装を提供せずにデリゲートメソッドを呼び出すと...どうなりますか.?

4

1 に答える 1

2

デリゲートが実装していないデリゲート メソッドを呼び出すと、例外が発生します。オプションのデリゲート メソッドの場合、通常は、デリゲートが応答するかどうかを最初に確認して、デリゲートがそれらを実装しているかどうかを確認します。

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

これは、非公式のプロトコルではまったく変わりません。非公式プロトコルとオプションのプロトコル メソッドを混同しないでください。通常、非公式プロトコルは単なるNSObjectカテゴリであり、実際には使用されるべきではありません。

于 2012-05-06T20:08:32.630 に答える