/*
回调函数不是由该函数的实现方法直接调
用,而是在特定的事件或条件发生时由另外的一 方调用的,用于对该事件或条件进行响应。
回调:.......................................................................................
委托方:huangwenjia 遵从协议,实现回调的方法,设定代理方
代理方:wushentao持有协议id指针,用于设定委托方
回调………………………………………………………………
*/
//.main
#import <Foundation/Foundation.h>
#import "HuangWenJia.h"
#import "WuShenTao.h"
int main(int argc, const char * argv[]) {
//创建了委托方
HuangWenJia *huang=[[HuangWenJia alloc] init];
//创建代理方
WuShenTao *wu=[[WuShenTao alloc] init];
//确立两者之间的代理关系
huang.delegate=wu;
wu.agent=huang;
//处理打蚊子
[huang doWork];
return 0;
}
//DaWenProtocol.h
//打蚊子的协议
#import <Foundation/Foundation.h>
@protocol DaWenProtocol <NSObject>
//回调方法的定义
//告诉委托方,我代理方打了几只蚊子
- (void)dawenNum:(int)num;
@end
//HuangWenJia.h
//委托方
#import <Foundation/Foundation.h>
#import "DaWenProtocol.h"
#import "WuShenTao.h"
@interface HuangWenJia : NSObject<DaWenProtocol>
//设定他的代理方
@property (nonatomic,strong) WuShenTao *delegate;
//处理打蚊子
- (void)doWork;
@end
//HuangWenJia.m
#import "HuangWenJia.h"
@implementation HuangWenJia
- (void)dawenNum:(int)num
{
NSLog(@"我打了%d只蚊子",num);
}
- (void)doWork
{
//把打蚊子的事情委托给代理方
[self.delegate daWen];
}
@end
//WuShenTao.h
//代理方
#import <Foundation/Foundation.h>
#import "DaWenProtocol.h"
@interface WuShenTao : NSObject
//设定委托方
//持有协议的id指针
@property (weak) id<DaWenProtocol> agent;
//打蚊子的方法
- (void)daWen;
@end
//WuShenTao.m
#import "WuShenTao.h"
@implementation WuShenTao
- (void)daWen
{
NSLog(@"开始打蚊子");
//当蚊子打完的条件满足了,就需要把具体打的蚊子的数量反馈回委托方
//回调
[self.agent dawenNum:20];
}
@end