//场景:Boss 开了一家公司,想找一个人(worker)买木头
@protocol BossDelegate<NSObject>
//代理需要实现的方法
- (void)buyWood;
- (void)designWebsite;
@end
@interface Boss : NSObject
//任意类型的对象都可以作为委托方的代理,只要遵守协议,实现协议中的方法即可
//声明属性设置代理(id)
//类型必须是id,并且必须遵循协议,名称一般就叫delegate
@property id<BossDelegate> delegate;
//boss自己的方法
- (void)sendCommand:(NSString *)command;
Boss.m
- (void)sendCommand:(NSString *)command{
NSLog(@"开会,我需要木头");
//被动触发
//代理者方法的调用,是由委托方决定的
[_delegate buyWood];
}
Worker.h
#import "Boss.h"
//遵守代理
@interface Worker : NSObject<BossDelegate>
//自己的方法
- (void)sleep;
Worker.m
@implementation Worker
//实现代理方法
- (void)buyWood{
NSLog(@"我帮Boss买木头");
}
//实现自己的方法
- (void)sleep{
NSLog(@"我要去睡觉");
}
Boss * boss = [[Boss alloc]init];
Worker * worker = [[Worker alloc]init];
//设置代理(调用)
//如果没有这句话就不知道谁遵守协议,也就没办法调用buyWood方法
boss.delegate = worker;
//通过这个方法调用代理
[boss sendCommand:@"买木头"];