如果一个协议中定义了某些方法,而某类又实现了该协议,那么该类必须实现这些方法。换句话说,协议是一组公用的方法声明,谁实现协议,谁就负责实现这些方法,不然会有黄色警告。协议可以扩展已有协议。协议的关键字是protocol,以@protocol开始声明,以@end结束。在类中实现协议时,只需要在类名后面加个<协议名>,即可。下面 看代码:

先定义一个协议:eat.h

[plain] view plaincopy
  1. #import <Foundation/Foundation.h>
  2. @protocol eat <NSObject>//协议eat扩展了协议NSObject.h
  3. -(void)eat;
  4. @end
上面扩展的NSObject协议不用实现,因为继承于NSObject的类已经继承了对NSObject协议的实现

下面创建一个类:Human.h

[plain] view plaincopy
  1. #import <Foundation/Foundation.h>
  2. #import "eat.h"
  3. @interface Human : NSObject <eat>
  4. @end
Human.m
[plain] view plaincopy
  1. #import "Human.h"
  2. @implementation Human
  3. -(void)eat
  4. {
  5. NSLog(@"协议中定义的eat");
  6. }
  7. @end
在main.m中调用:
[plain] view plaincopy
  1. #import <Foundation/Foundation.h>
  2. #import "eat.h"
  3. #import "Human.h"
  4. int main(int argc, const char * argv[])
  5. {
  6. @autoreleasepool {
  7. Human *human =[[Human alloc] init];
  8. [human eat];
  9. }
  10. return 0;
  11. }

2012-03-18 14:35:29.099 category1[1752:403] 协议中定义的eat

很简单吧,另外,在新版本的objective-c中,增加了协议的一些可选项,@optional,@required,协议中的方法必须实现,不然会报错,但是如果以@optional修饰的话便没有这种限制,默认必须实现的方法其实就相当于以@required修饰,比如上面的代码,我们可以做出以下修改:

eat.h

[plain] view plaincopy
  1. #import <Foundation/Foundation.h>
  2. @protocol eat <NSObject>//协议eat扩展了协议NSObject.h
  3. -(void)eat;
  4. @optional
  5. -(void)playGuitar;
  6. @required
  7. -(void)sleep;
  8. @end

这样的话,sleep方法和eat方法同样必须实现,而playGuitar方法便可选实现。

转载于:https://www.cnblogs.com/liuxiaoping/p/5149644.html

ios信息交互 协议的使用相关推荐

  1. 微服务应用性能分析实战14 互通有无:如何设计跨语言的 APM 交互协议?

    开源的 APM 产品的跨语言交互协议,以 2010 年 Google 发布 Dapper 论文的时间为节点,切分为两个阶段. 论文发布前,大多数跨语言交互协议的设计能简单解决上下游两个应用无法串联的问 ...

  2. Part6:客户端和服务端信息交互模型

    一.客户端和服务端信息交互模型 1.[问题]:什么是客户端和服务端? 客户端:可以向服务器发请求,并接收返回的内容进行处理 服务器端:能够接收客户端请求,并且把相关资源信息返回给客户端的 2.[面试题 ...

  3. 【产品设计】Android 和 IOS 的交互设计对垒

    在手机操作系统百花齐放的年代,也是产品经理最头疼的年代,因为需要根据不同的操作系统做出不同的设计.而如今,手机操作系统基本只剩下安卓和IOS两大阵营,只需处理好安卓和IOS交互上的差异部分就可以做好产 ...

  4. CANoe与外界的信息交互-UDP实现

    CANoe本身预留了许多与外界实现信息交互的接口,例如用户可以在Python中使用COM Server服务轻松调用CANoe及其工程运行的各种功能(可参考<CANoe开发从入门到精通>中的 ...

  5. 搜狐视频协议分析之Tracker交互协议分析 [20161113]

    续上篇(http://blog.csdn.net/cancanfairy/article/details/53100888),本篇分析搜狐影音的Tracker交互协议,即如何从Tracker处获取对应 ...

  6. java对接物联网api对接_一种对接物联网云平台的信息交互方法以及中间件系统与流程...

    本发明涉及物联网技术领域,特别是一种对接物联网云平台的信息交互方法以及中间件系统. 背景技术: 物联网是继计算机.互联网和移动通信之后的又一次信息产业的革命性发展,在互联网和移动互联网高速发展的时代, ...

  7. android编译51单片机,GitHub - whaoming/SCMAndroidCommunicate: Android与51单片机的信息交互...

    SCMAndroidCommunicate Android与51单片机的通信 前言 本篇文章将围绕App与单片机的蓝牙通信来说说lz最近进行开发的一些方案与思考 此文分为三部分: 单片机的PWM与串口 ...

  8. 客户端服务器信息交互,select实现客户端和服务器端的信息交互(TCP socket)

    实现功能: 客户端:<1>从标准输入(键盘)读入信息,然后通过socket发送到服务器端; <2>接收来自服务器端的信息,并显示到终端里. 服务器端:<1>从标准输 ...

  9. [MFC]MFC实现UDP客户端和服务端信息交互

    目录 前言 一.预期实现效果 二.UDP服务器端 1.初始界面 2.ServerSocket.h 3.ServerSocket.cpp 4.信息交互函数ProcessPendingRead() 三.U ...

  10. 浅析如何才能提高网站的信息交互能力?

    一般来说,网站建设只能够给过来的浏览用户进行浏览,没有其他的功能,但是可以增加网站交流的功能,能够帮助用户与网站之间的交流和沟通,体现网站的使用价值.那么我们应该如何提高网站的信息交互能力呢?下面就针 ...

最新文章

  1. 双精度张量内核加快了高性能计算
  2. 为自定义控件添加页面响应事件
  3. IT人面试必看!25个雷区和11个必问句!
  4. centos安装 ping 命令 ( yum provides )
  5. Hyperledger Fabric 核心模块(2)configtxgen工具
  6. 又一Attention函数诞生啦,带给你意想不到的巨大提升!
  7. 你真的了解Java系统启动流程吗?mysql不包含多个字符
  8. iOS UI-AlertView(警示框)和ActionSheet(选择框、操作表单)
  9. Redis数据存储解决方案
  10. 一套代码在不同的电脑执行快慢_电脑如何选配之硬盘篇
  11. 5.数据结构 --- 数组和广义表
  12. atitit.农历的公式与原理以及农历日期运算
  13. 计算机组成原理学习-哈工大《计算机组成原理》第二章
  14. win7安装Python所需资源
  15. MIDAS GTS NX在高边坡工程中的应用
  16. 【备忘】【No37】LAMP兄弟连李明老师讲Linux
  17. 铁路、公路施工企业劳务实名制管理系统解决方案
  18. jsp遍历List map
  19. 面试 http://mp.weixin.qq.com/s/p5mXVzixSDZZ6o9DpU5Xaw
  20. Selenium switch_to方法

热门文章

  1. TBB(Intel Threading Building Blocks)
  2. kubernetes视频教程笔记 (27)-集群调度-污点和容忍
  3. kubernetes视频教程笔记 (11)-pod容器生命周期、Init容器
  4. 将一个javaBean中非空的属性合并到另一个javaBean中
  5. mysql获取上周时间戳_php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)...
  6. Apache HTTP Server与Tomcat 的三种连接方式介绍
  7. Java SE 基础:List 集合列表
  8. linux配置ssh免密钥登录
  9. VM虚拟机手动配置IP地址
  10. Java Socket总结