iOS 协议与委托

来源:互联网 发布:苹果5s数据用不了 编辑:程序博客网 时间:2024/05/18 11:28

协议

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];//时间到了,汇报工作
这样老板让汇报工作的时候,员工就汇报一下自己的工作了。




原创粉丝点击