OC_11_2协议

这节接着往下讲,还差一个协议,什么是协议呢?

◎我们之前讲过非正式协议(NSObject的类目),那么肯定还有正式协议。
◎在OC中,一个类可以实现多个协议,通过协议可以弥补单继承的缺陷。但是协议跟继承不一样,协议只是一个方法列表,方法的实现得遵循该协议的类去完成。
▶协议:协议是一套标准,这个标准里面声明了很多方法,但是不关心具体这些方法是怎么实现的,具体的实现是由遵循这个协议的类去完成的。

好的,老规矩,咱们先创建工程:
这里写图片描述
建立一个Student类和一个DeliveryMan类,咱们就来举一个”栗子”实现一个送货员送货上门,先去到Student.h文件:

//协议的定义  正式协议
@protocol GoodsProtocol <NSObject>
/**
 *  在方法声明的时候,可以有两个关键字去限制是否让遵循该协议的类去实现此方法
 @required  标注的方法为必须实现的方法(默认的)
 @optional  标注的方法为可选实现的
 */
@required
-(void)sendGoods:(BOOL)flag;


@optional

@end


@interface Student : NSObject

@property(nonatomic,assign)BOOL flag;

//声明了一个必须实现的对象,使用assign/weak 为了防止循环引用
@property(nonatomic,assign)id<GoodsProtocol> delegate;  // 送货员 遵循GoodsProtocol协议

@end

去到Student.m文件:

@implementation Student

-(void)setFlag:(BOOL)flag
{
    _flag = flag;
    //conformToProtocol:确定了一个对象是否实现了某个协议
    //如果代理存在并且代理遵循了某个协议  则执行相应方法
    if(self.delegate &&[self.delegate  conformsToProtocol:@protocol(GoodsProtocol)]  )
    {
        [self.delegate sendGoods:flag];
    }
    else
    {
        NSLog(@"送货员代理不存在");
    }
}

去到DeliveryMan.h文件:

#import "Student.h"
//实现协议里面的方法
@interface DeliveryMan : NSObject <GoodsProtocol>
@end

再去到DeliveryMan.m文件:

@implementation DeliveryMan

-(void)sendGoods:(BOOL)flag 
//实现协议给的方法
{
    if(flag)
    {
        NSLog(@"我给你送货");
    }
    else
    {
        NSLog(@"学生不忙,你自己过来拿");
    }

}

然后,回到ViewController.m文件:

- (void)viewDidLoad {
    [super viewDidLoad];
    //创建Student的对象和DeliveryMan的对象
    Student *s1 = [Student new];
    DeliveryMan * d1 = [DeliveryMan new];
    s1.delegate = d1;//我的理解是:将这送货员作为送货的代理;实际delegate是可更改的,我认为,这的意思就是特指此送学生货的送货员,感觉有点特指的意思。
    s1.flag = YES;//bool返回yes,即进行判断

}

输出:
这里写图片描述
若为NO,即:学生不忙,你自己过来拿

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值