同じページにいることを確認するためだけに:)
ClassA
代理人がいる場合ClassADelegate
。これが意味するのは、で何らかの「イベント」が発生した場合ClassA
、ClassA
そのデリゲートを介して他のクラスに「イベント」が発生したことを通知したいということです- ClassB
。ClassA
デリゲートを介してこれを行います- ClassADelegate
。
これが発生ClassB
するためには、それがの代理人ClassA
として機能することを通知する必要がありますClassA
。@optionalとしてマークされていないプロトコルにリストされているすべてのメソッドを実装することにより、のプロトコルClassB
に「準拠」する必要があります。ClassA
コードでは、これを行うことができます:
// ClassA's delegate
@protocol ClassADelegate <NSObject>
- (void) didDoSomethingCool:(NSString *) name;
@end
// ClassA definition
@interface ClassA
// We'll use this property to call the delegate.
// id<XXX> means that which ever class is assigned to id MUST conform to XXX
@property (nonatomic, assign) id<ClassADelegate> classADelegate;
- (void) doSomething;
@end
// Class A implementation
@implementation ClassA
@synthesize classADelegate;
- (void) doSomething
{
// Do cool things here.
// Now call delegate, in this example, this will be ClassB
[classADelegate didDoSomethingCool:@"Hello from Class A"];
}
ClassB
次に、次の場所で何かが発生したことを通知できるように、配線する必要がありますClassA
。
// ClassB definition
@interface ClassB<ClassADelegate>
// ClassB<ClassADelegate> lets the compiler know that ClassB is required to have all the
// non-optional method that are listed in ClassADelegate. In short, we say that
// ClassB conforms to the ClassADelegate.
{
ClassA *_classA;
}
@end
ClassB
の実装ファイルのどこかに、次のものがあります。
// ClassB implementation
@implementation ClassB
- (id) init
{
self = [super init];
if(self)
{
// Just quickly creating an instance of ClassA.
_classA = [ClassA new];
// This is were we tell ClassA that ClassB is its delegate.
_classA.classADelegate = self;
}
return self;
}
- (void) dealloc
{
[_classA release];
[super dealloc];
}
- (void) didDoSomethingCool:(NSString *) name
{
// This is the method that ClassA will be calling via the
// [classADelegate didDoSomethingCool:@"Hello from Class A"] method call.
}
@end
これがお役に立てば幸いです:)