如果一个协议中定义了某些方法,而某类又实现了该协议,那么该类必须实现这些方法。换句话说,协议是一组公用的方法声明,谁实现协议,谁就负责实现这些方法,不然会有黄色警告。协议可以扩展已有协议。协议的关键字是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. 详尽 | PyTorch动态图解析
  3. [你必须知道的.NET]第十二回:参数之惑---传递的艺术(下)
  4. SpringBoot24 SpringDataJPA环境搭建、实体类注解、关联查询
  5. 从理论到实践,机器人SLAM技术详解
  6. [学习笔记]电磁场与电磁波
  7. [转]RHEL7 忘记密码修改root密码 (经过测试RHEL7.2 / 7.1 通过)
  8. 记录第一次部署servlet实例
  9. 你必须知道的 SmartSql
  10. mac下的secureCRT.8的设置
  11. 中小学计算机听课记录表,小学数学听课记录范文表格
  12. .Net Core 商城微服务项目系列(一):使用IdentityServer4构建基础登录验证
  13. http接口返回对象的方法
  14. [SOJ #538]好数 [CC]FAVNUM(2019-8-6考试)
  15. 行内元素(HTML、CSS)
  16. asp.net页生命周期
  17. 腾讯 android 插件,腾讯 Bugly for Xamarin Android 的插件
  18. LightTools.v5.1_完整好用版本\
  19. Ubuntu远程连接,远程桌面
  20. java卡 apdu_将applet安装到java卡的APDU命令的顺序是什么?

热门文章

  1. 操作系统导论 书中代码下载_经典教材统计学习导论终于有Python版了(附下载)...
  2. mysql 服务器参数调优_mysql的从头到脚优化之服务器参数的调优
  3. mysql 为什么性能不稳定_浅谈MySQL 数据库性能优化
  4. SpringBoot学习(一)初识SpringBoot、第一个SpringBoot程序
  5. Leetcode116. 填充每个节点的下一个右侧节点指针(宽搜或深搜)
  6. html异步 post,Jquery中Ajax/Post同步和异步请求
  7. 二十五、JAVA多线程(四、生产者和消费者问题)
  8. JVM 堆、栈概述 与 常见 OOM 原因及解决方案
  9. MySQL sql语句字段截取前几位,后几位等
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_7_字符输出流的续写和换行...