协议与委托(Protocol and Delegate)

34 篇文章 0 订阅
8 篇文章 0 订阅
   协议就相当于是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;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值