zoukankan      html  css  js  c++  java
  • 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一定要被实现。

  • 相关阅读:
    最新的thinkphp 数据库字段 自动转为小写。是个坑,要小心
    游戏助手开发
    最新的thinkphp 后台入口的问题
    最近的小成就
    一个大坑1111111111
    一个大坑
    代码的重构
    PHP上传文件大小的修改
    博客园Markdown编辑器代码高亮失效(官方已修复)
    2014年最新前端开发面试题(题目列表+答案 完整版)
  • 原文地址:https://www.cnblogs.com/jiwangbujiu/p/5333071.html
Copyright © 2011-2022 走看看