• IOS开发-OC学习-protocol(协议)


    在OC语言中,协议是一组方法,里面有两种方法,一种是遵守这个协议的类的实例必须实现的方法,另一种是可以实现也可以不实现的方法。

    例如我定义一个学生的协议,这个协议里有两个方法,其中一个是必选的方法;学生上学,另一个是可选方法,学生学习。只要是学生,不管大学生,中学生,小学生,只要遵守这个协议,都必须实现学生协议中的必选方法,也就是学生上学的方法。

    协议中只声明方法,不需要实现方法。方法的实现在遵守这个协议的类的.m文件中实现。

    以下是Student协议的定义:

     1 #import <Foundation/Foundation.h>
     2 
     3 //协议所遵守的基协议是NSObject
     4 @protocol Student <NSObject>
     5 
     6 //定义必选方法
     7 @required
     8 -(void)gotoschool;
     9 
    10 //定义可选方法
    11 @optional
    12 -(void)study;
    13 
    14 @end

    以下是大学生类的.h文件

    1 #import <Foundation/Foundation.h>
    2 
    3 //导入学生协议头文件
    4 #import "Student.h"
    5 
    6 //声明大学生类,遵守的student协议用<>括起来
    7 @interface academician : NSObject <Student>
    8 
    9 @end

    以下是大学生类的.h文件:

     1 #import "academician.h"
     2 
     3 @implementation academician
     4 
     5 //实现student协议中规定的必须实现的方法
     6 -(void)gotoschool{
     7     NSLog(@"大学生去上学");
     8 }
     9 
    10 @end

    以下是另一个遵守student协议的类:小学生类的.h文件:

    1 #import <Foundation/Foundation.h>
    2 #import "Student.h"
    3 @interface pupil : NSObject <Student>
    4 
    5 @end

    小学生类的.m文件:

    1 #import "pupil.h"
    2 
    3 @implementation pupil
    4 
    5 -(void)gotoschool{
    6     NSLog(@"小学生去上学");
    7 }
    8 
    9 @end

    以下是主函数:

     1 #import <Foundation/Foundation.h>
     2 //包含大学生类头文件
     3 #import "academician.h"
     4 //包含小学生类头文件
     5 #import "pupil.h"
     6 
     7 int main(int argc, const char * argv[]) {
     8     
     9 //   实例化一个大学生对象
    10     academician *daxuesheng = [[academician alloc]init];
    11 //    大学生对象遵守student协议中的gotoschool方法
    12     [daxuesheng gotoschool];
    13     
    14 //    实例化一个小学生对象
    15     pupil *xiaoxuesheng = [[pupil alloc]init];
    16 //    小学生对象遵守student协议中的gotoschool方法
    17     [xiaoxuesheng gotoschool];
    18 
    19     return 0;
    20 }

    注意:在以上例程中,student协议中的可选方法study没有被实现,这是可以的,但是必选方法gotoschool一定要被实现。

  • 相关阅读:
    jenkins安装
    HTTP协议客户端是如何向服务器发送请求
    接口概念
    fiddler导出har格式转化成yml格式

    双硬盘双系统装错了记录
    chrome的版本和driver版本对应表
    monkey详解
    adb命令熟悉
    cookie、session、token
  • 原文地址:https://www.cnblogs.com/jiwangbujiu/p/5333071.html
Copyright © 2020-2023  润新知