FJBoss.h
#import <Foundation/Foundation.h>
//2.协议!
@protocol staffDelegate <NSObject>
- (void) canIOS;
//1.委托类(制定协议的类)委托需要一个遵守协议的对象来帮他做事
@interface FJBoss : NSObject
//任何遵守协议的类创建的对象都可以作为老板的代理
//delegate一定要用weak修饰(防止循环引用造成对象不能销毁)
@property (nonatomic,weak) id <staffDelegate> delegate;
//老板告诉员工什么时候做事!
- (void) askStaffWorking;
FJBoss.m
#import "FJBoss.h"
//老板实现告诉该做什么事情!
@implementation FJBoss
- (void)askStaffWorking{
NSLog(@"员工们可以开始工作了!");
[_delegate canIOS];
}
@end
FJPerson.h
#import <Foundation/Foundation.h>
#import "FJBoss.h"
@interface FJPerson : NSObject <staffDelegate>
@end
FJPerson.m
#import "FJPerson.h"
@implementation FJPerson
- (void)canIOS{
NSLog(@"开始ios开发工作~");
}
@end
main.m
//协议就是一系列的条款和规定,要完成的功能(协议方法,只有声明没有方法)
//代理:遵守协议的类,实现协议方法
//委托:指定协议的类(将协议写在委托的.h文件中)
//使用协议代理解决问题:
//场景:老板想要做一个IOS项目
//分析:老板想做ios项目,但是自己不会做,找一个会做IOS开发的人来做
//重点:找到三要素:(委托,协议,代理)
//怎么找委托?就是自己想要完成某件事,但是自己不能或者不会做只能找别人做
//怎么确定协议?就是委托对代理的要求(这里就是会IOS开发)
//确定代理?遵守协议的对象(实现协议里的方法)。实际做事情的对象
//什么时候用协议代理委托;(如果一个对象想要做一件事情或者完成一个功能,
//但是自己做不到,需要一个可以做到的对象来帮他完成,这时候考虑使用协议代理)
#import <Foundation/Foundation.h>
#import "FJPerson.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//1.创建一个委托类
FJBoss *boss = [[FJBoss alloc] init];
//2.创建一个代理类
FJPerson *person = [[FJPerson alloc]init];
//3.将人成为老板的员工(设置代理类)
boss.delegate = person;
//4.老板让员工工作
[boss askStaffWorking];
}
return 0;
}