黑马程序员 protocol协议基本知识

来源:互联网 发布:吉林大学的网络教育 编辑:程序博客网 时间:2024/06/07 12:02

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=[Babynew];

        Nanny *nany=[Nannynew];

        baby.houseMaid=nany;

        [baby eat];

        [baby play];

        

    }

    return0;

}


#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.houseMaidfeedBaby];//调用保姆照料的方法

}

-(void)play{

    NSLog(@"I want to play");

    [self.houseMaidPlayWithBaby];

}

@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
原创粉丝点击