protocol协议基本知识

protocel协议概念及作用:声明一些必须实现和选择实现的方法

 使用流程:

        1.定义只生成一个.h文件

           @protocol base <NSObject>

           @end

 

        2.采纳

          类采纳协议

          @interface Person : NSObject<base>

          @end

 

        3.实现协议中的方法

          在类的.m中实现协议声明的方法

 所有的协议都是采纳nsobject

 一个协议可以采纳另一个协议

 类和协议可以采纳多个协议<协议1,协议2,协议3...>

 protocol使用注意:仅用来声明方法,谁采纳谁实现方法

 只要父类遵守了协议,子类也遵守

 oc不能继承多个类,但是能遵守多个协议(单继承,多采纳)

 @protocol的两个关键字

 @required 必须实现

 @optional 选择实现 

 

protocol代理设计模式:传入的对象代替当前类完成了某个功能,称为代理模式:

 1.定义协议,声明方法

 2.创建代理类,遵守上面的代理协议

 3.在需要代理的类中,定义一个对象,类型为id且遵守代理协议的

 4.在代理类中调用对象,调用代理类的方法

 5.在main.m中实现

 

#import <Foundation/Foundation.h>

#import "agreement.h"

#import "Baby.h"

#import "Nanny.h"

#import "PlayWithBaby.h"

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        Baby *baby=[Baby new];

        Nanny *nany=[Nanny new];

        baby.houseMaid=nany;

        [baby eat];

        [baby play];

        

    }

    return 0;

}

 

#import <Foundation/Foundation.h>

#import "agreement.h"//导入协议

#import "PlayWithBaby.h"

@interface Baby : NSObject

@property(nonatomic,strong)id<agreement,PlayWithBaby>  houseMaid;//婴儿中有个保姆的属性

-(void)eat;//婴儿自己的行为

-(void)play;

@end

 

#import "Baby.h"

 

@implementation Baby

-(void)eat{

    NSLog(@"I'm a baby,and i'm hungry!");

    [self.houseMaid feedBaby];//调用保姆照料的方法

}

-(void)play{

    NSLog(@"I want to play");

    [self.houseMaid PlayWithBaby];

}

@end

 

#import <Foundation/Foundation.h>

#import "agreement.h"

#import "PlayWithBaby.h"

@interface Nanny : NSObject<agreement,PlayWithBaby>//照料小孩者应采纳协议,即遵守协议,可以采纳多个协议

 

@end

 

 

#import "Nanny.h"

 

@implementation Nanny

-(void)feedBaby{

    NSLog(@"I'm a domestic help,and i can take care of baby professionally!Yes,i'm feeding");//在保姆的.m文件中实现方法

}

-(void)PlayWithBaby{

    NSLog(@"Baby have finished ,i'm playing with him");

}

@end

 

#import <Foundation/Foundation.h>

@protocol agreement <NSObject>

-(void)feedBaby;//在协议中声明方法,相当于合同中的条款

@end

 

#import <Foundation/Foundation.h>

#import "agreement.h"

@protocol PlayWithBaby <agreement>//一个协议可以采纳另一个协议

-(void)PlayWithBaby;

@end

 
本程序采用多文件开发而写,所以就按顺序一个一个复制过来了,欢迎大家批评指正
 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值