protocols 协议
协议
协议用于声明一些方法,这些方法有其他任何(遵循协议的)类来实现。它主要用于一下三种情形:
1.声明一些其他类期望实现的方法;
2.为需要隐藏自身的对象定义接口;
3.在没有继承相关性的对象之间抽象出相似性;
接口定义(用于其他类实现)
类和条目(category)的接口主要声明了一些方法,这些方法会在特定类实现文件中加以定义。相对而言,正式和非正式的协议,它们所声明得方法并不会针对特定的类,它是一种大众方法声明,任意一个或者多个类中都可以对这些方法加以实现。
从定义方法来说,协议就是一种简单的方法声明列表,不绑定任何类定义。例如,以下一些定义用户鼠标事件的方法可以汇集在一个协议中
- (void)mouseDown:(NSEvent *)theEvent; |
- (void)mouseDragged:(NSEvent *)theEvent; |
- (void)mouseUp:(NSEvent *)theEvent; |
任意想要响应这些鼠标事件的类都可以遵循该协议并在自身类内部加以实现。
协议使得方法的声明不再依赖于特定类的层级关系,所以它的使用方式与类和条目(category)有很大的不同。协议只知道它包含的方法列表(可能)会在某些地方实现,但它并不关心具体在哪个类中实现。协议真正关心的是特定的类是否遵从并实现了类中声明的方法。因此对于对象的分类,不仅涉及类的继承关系,还有它们所遵循的协议。某些类即使它们属于不同的层级关系,但是它们所遵循的协议相同,它们也可以有共通点。
协议在面向对象的设计中扮演了很重要的角色,尤其是当一个项目要用到很多的实现体或者其他项目所开发的对象。cocoa软件中就大量的使用了协议来实现objective-c消息的内部通讯。
当然并不是所有的objective-c程序都必须使用协议。它是非强制的,不像类定义和发消息表达式。有些cocoa框架中使用了它们,有些没有。主要还是看手头的工作是否有必要。
其他类来实现方法
- setAssistant:anObject |
{ |
assistant = anObject; |
} |
- (BOOL)doWork |
{ |
... |
if ( [assistant respondsToSelector:@selector(helpOut:)] ) { |
[assistant helpOut:self]; |
return YES; |
} |
return NO; |
} |
helpOut:
的协议方法,这种情况下,你根本无法import相关的声明文件。
为匿名对象声明接口
protocols 协议相关推荐
- 【Xamarin笔记】Events, Protocols and Delegates
Events, Protocols and Delegates 事件.协议和委托 This article presents the key iOS technologies used to re ...
- wss协议 c 服务器,利用LIBWEBSOCKETS写WS、WSS服务端和客户端
libwebsockets是一款轻量级用来开发服务器和客户端的C库.按照官方(https://libwebsockets.org/)给出的介绍来看,它不仅支持ws,wss还同时支持http与https ...
- https.protocols的检测与设置
最近在做一个需求,用到了https进行接口交互,在测试环境报如下错: 10:20:21,667 ERROR [stderr](http-executor-threads - 39) java.lang ...
- 彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想
OkHttp 现在统治了Android的网络请求领域,最常用的框架是:Retrofit+okhttp.OkHttp的实现原理和设计思想是必须要了解的,读懂和理解流行的框架也是程序员进阶的必经之路,代码 ...
- Springboot swagger2教程
swagger2教程 swagger,中文"拽"的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容 ...
- fmpeg 编译编码 _libx264和librtmp
window下通过msys2编译libx264.lib msys2的下载地址为:http://www.msys2.org/ 首先下载msys2并安装软件,安装时可以选择安装路径,我选择的是安装目录为: ...
- php web目录结构,目录结构
目录结构 Workerman // workerman内核代码 ├── Connection // socket连接相关 │ ├── ConnectionInterface.php// socket连 ...
- oc runtime
观 :http://yulingtianxia.com/blog/2014/11/05/objective-c-runtime/ 的总结: 1.调用方法的本质: [receiver message] ...
- Java URL处理
URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址.表示为互联网上的资源,如网页或者FTP地址. 本章节我们将介绍Java是如处理URL的.URL ...
最新文章
- Oracle笔记 四、增删改、事务
- Sklearn的train_test_split用法
- ubutnu16.04搭建LAMP环境(搭建wordpress博客)
- 重磅!2021 高通人工智能应用创新大赛今日开赛
- Spring 加载、解析applicationContext.xml 流程
- 打开计算机后 无法最小化,最小化窗口后无法在任务栏中显示的三种解决方法...
- centos7离线安装oracle11g,CentOS 7.5离线安装Oracle 11gR2
- 使用Cygwin实现vlc 1.0.5的wince移植
- Spring Boot异常处理
- Python+OpenGL使用Cohen-Sutherland算法实现直线裁剪
- Java基础学习总结(78)——Java main方法深入研究学习
- PyTorch 功能欠缺,Meta 推出 TorchRec 来补救?
- 本地html如何导出pdf,html表格以pdf格式导出到本地
- Linux中的三个特殊文件
- Linux系统调用接口添加简单示例
- 同花顺股票交易接口怎样执行量化挂单策略?
- 用html设计logo,终于知道网页logo设计要点
- k8s停止服务_Kubernetes 优雅停止Pod
- Android 仿微信全局字体大小调整
- 八位共阴数码管的工作方式