IOS之学习笔记十四(协议的定义和实现)
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之学习笔记十四(协议的定义和实现)相关推荐
- IOS之学习笔记十五(协议和委托的使用)
1.协议和委托的使用 1).协议可以看下我的这篇博客 IOS之学习笔记十四(协议的定义和实现) https://blog.csdn.net/u011068702/article/details/809 ...
- 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进
吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...
- Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理
Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...
- 【神经网络】学习笔记十四——Seq2Seq模型
本文简要介绍seq2seq,即序列到序列的基本知识,是深度学习和NLP中一个重要的知识. 从三部分来说,seq2seq基本简介,应用场景和原理解析. 一.什么是Seq2Seq 所谓Seq2Seq(Se ...
- linux学习笔记十四:安装SAMBA(Server Message Block)
NFS:仅用于Linux之间 CIFS:仅用于Windows之间 SAMBA:可用于Linux与Windows之间,基于NetBIOS协议(用于LAN内部,不能跨路由),没有IP地址的概念,根据 Ne ...
- 重新认识错过(通向财富自由之路学习笔记十四)
本周学习<通向财富自由之路>专栏重新认识错过的文章,在文章中作者介绍了自己是如何错过一次升级的.对于这种错过,非常有同感.比如在中学时候,需要学习生物.历史.地理等学科,而这些学科不需要计 ...
- 【theano-windows】学习笔记十四——堆叠去噪自编码器
前言 前面已经学习了softmax,多层感知器,CNN,AE,dAE,接下来可以仿照多层感知器的方法去堆叠自编码器 国际惯例,参考文献: Stacked Denoising Autoencoders ...
- Mr.J-- jQuery学习笔记(十四)--动画显示隐藏
eq()函数 定义和用法 :eq() 选择器选取带有指定 index 值的元素. index 值从 0 开始,所有第一个元素的 index 值是 0(不是 1). 经常与其他元素/选择器一起使用,来选 ...
- 好记性不如烂笔杆-android学习笔记十四 EditText 画行,解决光标压线问题
这个问题我在网上看来很多方法,有些看得似懂非懂的,后来自己采用一种比较投机的方法,居然可行,呵呵,拿出来跟大家分享一下. 其实就是把画的线向下偏移一定高度,当然针对不同分辨率,这个值也就不同: (因为 ...
最新文章
- OCIEnvCreate failed with return code -1 but error message text was not available with ODP.net
- 漫画算法:什么是一致性哈希?
- EasyPR--开发详解(8)文字定位
- psycopg2模块安装问题
- AnularJS1事件
- 大话业务流程图(二)—如何绘制业务流程图?
- date 减去固定时长_javascript – 从Date对象减去日/月/年
- oracle 配置监听和TNS常见的问题
- 2021年软考真题系统分析师真题答案解析汇总
- arduino和轮毂电机接线_Arduino六足机器人第一部分—机制与接线
- 小程序开发合同_如何开发微信小程序?
- Spring Boot获取节假日API
- python数组a减去数组b的简便操作
- Link warning:LNK4199 解决
- cogs2398 切糕 最小割
- java 视频断点播放,实现无卡顿
- html中背景色优先级,CSS背景颜色优先级
- 计算机机房一般在几楼,设备层一般在高层楼房第几层?
- csv是什么文件(ofd是什么文件)
- 农庄规划软件测试,《模拟农场17》游戏评测:现代化农场让你学会如何种田
热门文章
- 基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑
- 一个简单的规则引擎例子
- 没有Kubernets,学习Docker还有用吗?
- 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析
- 如何在ASP.NET Core中使用SignalR构建与Angular通信的实时通信应用程序
- C#黔驴技巧之去重(Distinct)
- [ASP.NET Core 3.1]浏览器嗅探解决部分浏览器丢失Cookie问
- ASP.NET Core快速入门(第5章:认证与授权)--学习笔记
- .NET Conf 2019 大会上发布.NET Core 3.0
- WTM重磅更新,LayuiAdmin免费用 and more