1、正式协议的定义

@protocol 协议名 <父协议1, 父协议2>{零个到多个方法定义}

一个协议可以有多个直接父协议,但协议只能继承协议,不能继承类

协议只有方法签名,没有方法实现

2、实现协议

@interface 类名 : 父类 <协议1,协议2…>@end

协议和java里面的接口差不多

如果要使用协议定义变量,有如下两种语法

NSObject<协议1,协议2>*变量;

id<协议1,协议2> 变量;

@optional关键字之后声明的方法可选实现

@required关键字之后声明的方法必选实现

3、测试Demo

1)、FirstProtocol.h

#ifndef FirstProtocol_h
#define FirstProtocol_h@protocol FirstProtocol
-(void)first;
@end#endif /* FirstProtocol_h */

2)、SecondProtocol.h

#ifndef SecondProtocol_h
#define SecondProtocol_h
@protocol SecondProtocol
-(void)second;
@end#endif /* SecondProtocol_h */

3)、ThirdProtocol.h

#import "FirstProtocol.h"
#import "SecondProtocol.h"#ifndef ThirdProtocol_h
#define ThirdProtocol_h
@protocol ThirdProtocol <FirstProtocol, SecondProtocol>
-(void)third;
@end#endif /* ThirdProtocol_h */

4)、DoProtocol.h

#import <Foundation/Foundation.h>
#import "ThirdProtocol.h"#ifndef DoProtocol_h
#define DoProtocol_h
@interface DoProtocol : NSObject <ThirdProtocol>
@end#endif /* DoProtocol_h */

5)、DoProtocol.m

#import <Foundation/Foundation.h>#import "DoProtocol.h"@implementation DoProtocol
-(void)first
{NSLog(@"this first method");
}
-(void)second
{NSLog(@"this second method");
}
-(void)third
{NSLog(@"this third method");
}
@end

6)、main.m

#import "DoProtocol.h"
#import "ThirdProtocol.h"
#import "FirstProtocol.h"int main(int argc, char * argv[]) {@autoreleasepool {DoProtocol *protocal = [DoProtocol new];[protocal first];[protocal second];[protocal third];NSObject<FirstProtocol> *first = [[DoProtocol alloc] init];[first first];id<SecondProtocol> second = [[DoProtocol alloc] init];[second second];}
}

4、运行结果

this first method
this second method
this third method
this first method
this second method

IOS之学习笔记十四(协议的定义和实现)相关推荐

  1. IOS之学习笔记十五(协议和委托的使用)

    1.协议和委托的使用 1).协议可以看下我的这篇博客 IOS之学习笔记十四(协议的定义和实现) https://blog.csdn.net/u011068702/article/details/809 ...

  2. 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进

    吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...

  3. Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理

    Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...

  4. 【神经网络】学习笔记十四——Seq2Seq模型

    本文简要介绍seq2seq,即序列到序列的基本知识,是深度学习和NLP中一个重要的知识. 从三部分来说,seq2seq基本简介,应用场景和原理解析. 一.什么是Seq2Seq 所谓Seq2Seq(Se ...

  5. linux学习笔记十四:安装SAMBA(Server Message Block)

    NFS:仅用于Linux之间 CIFS:仅用于Windows之间 SAMBA:可用于Linux与Windows之间,基于NetBIOS协议(用于LAN内部,不能跨路由),没有IP地址的概念,根据 Ne ...

  6. 重新认识错过(通向财富自由之路学习笔记十四)

    本周学习<通向财富自由之路>专栏重新认识错过的文章,在文章中作者介绍了自己是如何错过一次升级的.对于这种错过,非常有同感.比如在中学时候,需要学习生物.历史.地理等学科,而这些学科不需要计 ...

  7. 【theano-windows】学习笔记十四——堆叠去噪自编码器

    前言 前面已经学习了softmax,多层感知器,CNN,AE,dAE,接下来可以仿照多层感知器的方法去堆叠自编码器 国际惯例,参考文献: Stacked Denoising Autoencoders ...

  8. Mr.J-- jQuery学习笔记(十四)--动画显示隐藏

    eq()函数 定义和用法 :eq() 选择器选取带有指定 index 值的元素. index 值从 0 开始,所有第一个元素的 index 值是 0(不是 1). 经常与其他元素/选择器一起使用,来选 ...

  9. 好记性不如烂笔杆-android学习笔记十四 EditText 画行,解决光标压线问题

    这个问题我在网上看来很多方法,有些看得似懂非懂的,后来自己采用一种比较投机的方法,居然可行,呵呵,拿出来跟大家分享一下. 其实就是把画的线向下偏移一定高度,当然针对不同分辨率,这个值也就不同: (因为 ...

最新文章

  1. OCIEnvCreate failed with return code -1 but error message text was not available with ODP.net
  2. 漫画算法:什么是一致性哈希?
  3. EasyPR--开发详解(8)文字定位
  4. psycopg2模块安装问题
  5. AnularJS1事件
  6. 大话业务流程图(二)—如何绘制业务流程图?
  7. date 减去固定时长_javascript – 从Date对象减去日/月/年
  8. oracle 配置监听和TNS常见的问题
  9. 2021年软考真题系统分析师真题答案解析汇总
  10. arduino和轮毂电机接线_Arduino六足机器人第一部分—机制与接线
  11. 小程序开发合同_如何开发微信小程序?
  12. Spring Boot获取节假日API
  13. python数组a减去数组b的简便操作
  14. Link warning:LNK4199 解决
  15. cogs2398 切糕 最小割
  16. java 视频断点播放,实现无卡顿
  17. html中背景色优先级,CSS背景颜色优先级
  18. 计算机机房一般在几楼,设备层一般在高层楼房第几层?
  19. csv是什么文件(ofd是什么文件)
  20. 农庄规划软件测试,《模拟农场17》游戏评测:现代化农场让你学会如何种田

热门文章

  1. 基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑
  2. 一个简单的规则引擎例子
  3. 没有Kubernets,学习Docker还有用吗?
  4. 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析
  5. 如何在ASP.NET Core中使用SignalR构建与Angular通信的实时通信应用程序
  6. C#黔驴技巧之去重(Distinct)
  7. [ASP.NET Core 3.1]浏览器嗅探解决部分浏览器丢失Cookie问
  8. ASP.NET Core快速入门(第5章:认证与授权)--学习笔记
  9. .NET Conf 2019 大会上发布.NET Core 3.0
  10. WTM重磅更新,LayuiAdmin免费用 and more