#import <Foundation/Foundation.h>
#import "Boss.h"
#import "Coder.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
/*
协议:本质就是一组接口
协议代理作用在:传参 回调
*/
/*
1.声明协议 @protocol
2.区分代理与被代理
(如果参数由a对象传往b对象 那么A就是B的被代理 B是A的代理)
3.在被代理中
声明id <xxx协议> delegate成员变量 同事实现@property @synthesize
在被代理的某个方法中调用代理的方法
固定写法
if(_delegate && [_delegate respondsToSelector:@selector(startCode)]){
[_delegate startCode];
}
4.代理方
代理方遵守协议<XXX协议>
代理实现接口
5.使用代理时 必须设置代理 A.delegate = B
*/
Boss *b = [[[Boss alloc] init] autorelease];
Coder *c = [[[Coder alloc] init] autorelease];
//将c设置为b的代码
b.delegate = c;
[b work];
Chief *chief = [[[Chief alloc] init] autorelease];
Soldier *soldier=[[[Soldier alloc] init] autorelease];
chief.delegate = soldier;
[chief order];
}
return 0;
}
#import <Foundation/Foundation.h>
//1.@protocol声明一个协议<遵守NSObject协议>
@protocol CoderProtocal <NSObject>
//不带参不带返回值
-(void) startCode;
@end
#import <Foundation/Foundation.h>
#import "CoderProtocal.h"
//2.区分代理预备代理
@interface Boss : NSObject
{
//delegate必须遵守协议
id<CoderProtocal> _delegate;
}
@property(nonatomic ,assign) id <CoderProtocal> delegate;
//工作
- (void)work;
@end
boss.m
@implementation Boss
@synthesize delegate =_delegate;
- (void)work
{
//代理固定写法
//设置了代理(代理不为空) && 代理实现了startCode方法
if (_delegate &&[_delegate respondsToSelector:@selector(startCode)]) {
[_delegate startCode];
}
}
@end
#import "CoderProtocal.h"
//代理方遵守协议
@interface Coder : NSObject<CoderProtocal>
//代码规范:标记协议代码 让代码更清晰
#pragma mark -CoderProtol
//实现协议
-(void)startCode
{
NSLog(@"代码写到吐血...");
}