//首先定义一个正式的协议,写着你委托要实现的方法
@optional
-(void)mylog;
@end
//
@interface BView : NSObject
{
id<BViewDelegate> delegate; //设置一个委托变量
}
@property(nonatomic,assign)id<BViewDelegate> delegate;
-(void)NSlogs;
@end
@implementation BView
@synthesize delegate;
-(id)initWithDelage{
if (self = [super init]) {
delegate = nil;
}
return self;
}
-(void)NSlogs{
if(delegate!=nil && [delegate respondsToSelector: @selector(mylog) ] == true)
[delegate mylog]; //当执行这个方法的时候,调用的是delegate指针所指向类的方法
}
@end
@interface MyView : NSObject<BViewDelegate> //
{
BView *bView;
}
@end
@implementation MyView
-(id)init{
if (self = [super init]) {
bView = [[BView alloc] initWithDelage];
bView.delegate = self; //BView类的delegate 的指针指向self
[bView NSlogs]; //调用BView类中的方法
}
return self;
}
-(void)mylog{ //实现委托的方法
NSLog(@"I am a delegate!");
}
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
MyView *view = [[MyView alloc] init]; //会输出"I am a delegate!"
[pool drain];
return 0;
}