协议
1、协议里面定义了一组方法,本身不对方法进行实现,让使用了它的类来实现
2、在任何类中,只有声明了该协议,就可以实现里面的方法
代理(delegate)
代理就是委托别人办事,当一件事情触发时,自己不处理,交给别人处理。
接下里我们来举一个例子,在一个工作中有管理者与员工,管理者要让某个职工到时间后汇报自己的工作状况,
首先我们先建一个CompanyManager类,在里面定义CompanyManager类与工作协议,代码如下:
头文件:
#import <Foundation/Foundation.h>
@protocol WorkDelegate<NSObject>
@required//必须实现的
-(void)BeginWork;
-(void)Working:(NSString *)workcontent;
@optional//可以不实现
-(void)FinishWork;
@end
@interface CompanyManager : NSObject
@property(nonatomic,retain) id<WorkDelegate> delegate;
-(void)ReportWork;
@end
实现代码:
#import "CompanyManager.h"
@implementation CompanyManager
-(void)dealloc{
[_delegate release];
[super dealloc];
}
-(void)ReportWork{
//当事件触发的时候,自己不处理,交给别人处理
[_delegate BeginWork];
[_delegate FinishWork];
[_delegate Working:@"我正在做游戏开发"];
}
@end
然后,我们再来定义一个员工类,CompanyEmployee,要求在类中声明WorkDelegete协议,没有员工汇报自己的工作情况,实现代码如下:
头文件如下:
#import <Foundation/Foundation.h>
#import "CompanyManager.h"
@interface CompanyEmployee : NSObject<WorkDelegate>
@end
实现部分如下:
#import "CompanyEmployee.h"
@implementation CompanyEmployee
-(void)BeginWork{
NSLog(@"我已经开始工作了,正在做开发");
};
-(void)Working:(NSString *)workcontent{
NSLog(@"%@",workcontent);
}
-(void)FinishWork{
NSLog(@"我的工作已经完成了,还有什么新的工作要做吗?");
};
@end
接下来,我们来模拟一下,老板让员工汇报工作的情况,代码如下:
CompanyManager *manager=[[[CompanyManager alloc] init] autorelease];
CompanyEmployee *employee=[[[CompanyEmployee alloc] init] autorelease];
manager.delegate=employee;
[manager ReportWork];//时间到了,汇报工作
这样老板让汇报工作的时候,员工就汇报一下自己的工作了。