您的位置:首页 > 其它

oc学习之旅:简单协议

2013-12-26 19:37 351 查看
#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;
}

CoderProtocal.h

#import <Foundation/Foundation.h>

//1.@protocol声明一个协议<遵守NSObject协议>
@protocol CoderProtocal <NSObject>

//不带参不带返回值
-(void) startCode;

@end

boss.h

#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

Coder.h

#import "CoderProtocal.h"

//代理方遵守协议

@interface Coder :
NSObject<CoderProtocal>

Coder.m

//代码规范:标记协议代码
让代码更清晰

#pragma mark -CoderProtol

//实现协议
-(void)startCode
{

NSLog(@"代码写到吐血...");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: