您的位置:首页 > 移动开发 > IOS开发

协议与委托(Protocol and Delegate)

2013-10-22 21:27 483 查看

   协议就相当于是C++中的纯虚基类,它只能定义函数并且只能由其他类来实现。而委托则类似于Java接口,其实协议和委托之间并无必然联系,只是在Obj—C中常用协议来实现委托。


        protocol-协议,就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。

        delegate-委托,顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。

        注意以下几点:

1.协议声明了可以被任何类实现的方法; 

2.协议不是类,它是定义了一个其他对象可以实现的接口 ;

3.如果在某个类中实现了协议中的某个方法,也就是这个类实现了那个协议。 

4.协议经常用来实现委托对象。

5.在协议的声明中的特性关键字:

      @optional预编译指令:表示可以选择实现的方法 

      @required预编译指令:表示必须强制实现的方法

下面来举个栗子:

1)一个人(custom)去饭店吃饭,custom要下订单-(void)ordor;,这时候waiter来了,为cumstor服务。

2)当custom吃晚饭要付款了-(void)pay;,这是后waiter过来收款,custom付款。

首先先创建一个协议

#import <Foundation/Foundation.h>

@protocol Manager <NSObject>
@required
-(void)order;//下订单
-(void)pay:(int)x;//付款
@end


首先是一个顾客类,由于顾客要将服务的事情都交给服务员处理,所以在让顾客实现Manager这个协议,成为委托人,以下是头文件:

#import <Foundation/Foundation.h>
#import "Manager.h"
@interface Custom : NSObject<Manager>//引入协议的概念

@property (nonatomic,weak) id delegate;
@end

以下是.m文件:

#import "custom.h"

@implementation Custom
@synthesize delegate=_delegate;
-(id)init{
if (self=[super init]) {
//

}
return self;
}
-(void)order{
[_delegate order];//让接受委托的人去执行订单任务
}
-(void)pay:(int)i{
[_delegate pay:i];//让接受委托的人去执行收款的任务
}
@end


然后,我们来实现服务员的类,导入"Manager.h"这个协议的头文件,实现协议中的方法

#import <Foundation/Foundation.h>
#import "Manager.h"
@interface Waiter : NSObject

@end


以下是.m文件:

#import "waiter.h"

@implementation Waiter
-(id)init{
if (self=[super init]) {
//
}
return self;
}
-(void)order{
NSLog(@"服务员过来为顾客服务\n");
}
-(void)pay:(int)i{
NSLog(@"服务员过来收钱:%d\n",i);
}
@end


最后是main.m:

#import <Foundation/Foundation.h>
#import "custom.h"
#import "waiter.h"
int main(int argc, const char * argv[])
{

@autoreleasepool {
Waiter * w=[[Waiter alloc] init];
Custom * c=[[Custom alloc] init];
c.delegate=w;
[c order];
[c pay:1000];
// insert code here...
NSLog(@"Hello, World!");

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios delegate 协议委托