协议(protocol)是Objective-c中一个非常重要的语言特性,从概念上讲,非常类似于JAVA中接口. 一个协议其实就是一系列有关联的方法的集合(为方便后面叙述,我们把这个协议命名为myProtocol)。协议中的方法并不是由协议本身去实现,相反而是由遵循这个协议的其他类来实现。换句话说,协议myProtocol只是完成对协议函数的声明而并不管这些协议函数的具体实现。
声明协议
- @protocolmyProtocol<NSObject>
- @required
- -(void)protocolNameA:(NSString*)string;
- @optional
- -(void)protocolNameB:(NSString*)string;
- @end
第一行是声明这个协议的名字为myProtocol。尖括号中的NSObject本身也是一个协议,其中定义了很多基本的协议函数,比如performSelector,isKindOfClass,respondsToSelector,conformsToProtocol,retain,release等。
协议接口分为required和optional两类。required顾名思义是说遵守这个协议的那个类“必须要”实现的接口,而optional则是可以实现也可以不实现的。协议接口的定义和普通的函数定义是一样的。
最后一行@end表示协议定义结束。这个协议的定义通常是在.h文件中。
实现协议
- @interfacemyClass<myProtocol>
- @interfacemyClass:NSObject<myProtocol>
- @interfacemyClass:NSObject<myProtocol,NSCoding>
上面分别是三种不同的情况。编译的时候编译器会自动检查myClass是否实现了myProtocol中的必要的(@required)接口。如果没有实现则会发出一个警告信息。另外需要注意的是,如果有继承自myClass的子类,这些子类也是会自动遵循myClass所遵循的协议的,而且也可以重载这些接口。
为什么需要协议?
To declare methods that others are expected to implement
To declare theinterfaceto an object while concealing its class
To capture similarities among classes that are not hierarchically related
To declare methods that others are expected to implement
To declare theinterfaceto an object while concealing its class
To capture similarities among classes that are not hierarchically related
分享到:
相关推荐
《Modbus应用协议V1.1b》是一个详细介绍Modbus通信协议的重要文档,该文档以PDF格式存在于压缩包“Modbus_Application_Protocol_V1_1b.zip”中,其内容涉及了Modbus协议在V1.1b版本中的具体应用和规范。Modbus是一种...
标签"Python库"揭示了这个资源的本质,即它是一个Python编程语言的软件库。Python库是Python程序设计中的重要组成部分,它们提供预定义的功能,帮助开发者快速实现特定任务,如网络请求、数据处理、图形界面等。surf...
3. **Python**:表明这个资源是针对Python编程语言的,与Python 3兼容。 4. **Python库**:`jupyter_protocol`是一个Python库,可供其他Python项目引用和使用,以实现与Jupyter内核的通信。 综上所述,`jupyter_...
"python 开发语言"表明它是用Python编程语言编写的,"后端"意味着这个库可能主要用于服务器端的开发工作,处理数据、提供服务等。"Python库"则直接点明这是一个可以被其他Python项目导入和使用的代码集合。 综上所...
Protocol Buffers是Google开发的一种数据序列化协议,它允许开发者定义数据结构,然后生成可以在各种编程语言中使用的代码,以便轻松地存储和交换数据。在这个特定的案例中,“test_Protocol_Buffers”可能是一个...
不过,从文件名来看,我们可以推断这个压缩包可能包含了与376.1协议相关的各种源代码文件,这些文件可能包括C、C++、Java或其他编程语言的实现。开发者通过解压并研究这些源码,可以深入了解协议的实现机制,例如...
源代码通常是用编程语言编写的,可能是C、C++或Java等,用于控制传感器节点如何选择路径,以及如何在WSN中有效地分发数据。 无线传感器网络是由大量小型、低功耗的设备组成,这些设备能够感知环境并进行通信。在WSN...
标题中的"smac.rar_ smac-stack-1.2.tar_SMAC的源码_WSN mac protocol_mac协议_s-ma"提到了几个关键概念,首先是"SMAC",它代表了Sleep Mode MAC(睡眠模式MAC)协议,这是一种为无线传感器网络(WSN,Wireless ...
4. **Vb6、DelphiDemo**:这两个文件或文件夹可能包含使用VB6(Visual Basic 6)和Delphi编程语言编写的示例代码或演示应用程序。这些示例可以帮助开发者学习如何在各自的编程环境中使用Anviz SDK。 5. **vb**:...
Python库“simple_protocol-0.1.9-py3-none-any.whl”是一个用于后端开发的工具,专为Python编程语言设计。该库的版本号是0.1.9,表明它可能已经历过多次迭代和改进,以提供更稳定和功能丰富的服务。其名称暗示它...
标题 "80-V5348-1_J_Streaming_DLoad_Protocol_qcomqdl_qualcomm_源码.zip" 暗示我们正在处理一个与Qualcomm公司的流式下载(Streaming DLoad)协议相关的源代码包。这个协议可能是Qualcomm Quick Download(QDL)的...
标题 "test_Protocol_Buffers_c++" 指向的是一个使用 C++ 语言进行 Protocol Buffers(简称 Protobuf)测试的项目,而描述中提及的 "Protocol_Buffers 读取测试 caffe" 表明这个项目可能涉及到将 Protobuf 与深度...
在不同编程语言中实现MC协议通信,如C#、Python或VB.NET,主要涉及以下步骤: 1. **库的选择**:选择合适的串口通信库,如C#的System.IO.Ports命名空间,Python的pyserial库等。 2. **配置串口**:根据MC协议设置...
源码通常由一系列编程语言(如C、C++、Java或Python)编写,包含了函数、类、变量等编程元素,用于实现协议规定的操作。 根据压缩包内的文件名"protocol376_376.1-2009_376.1协议_376_376.1_376.1协议_源码.zip",...
文件标题为“达明机器人1.76_Common_Protocol_Final_中文.pdf”,此标题表明了文档的版本和语言。版本号“1.76”指的是该手册或者协议的特定更新版本,而“Final”可能意味着这是最终版,表明了稳定性和完成度。标题...
标题中的"mac protocol.rar_Mac matlab_layerss3o_mac_mac protocol_routing p"表明这是一个与MAC(Media Access Control)协议相关的项目,使用了MATLAB语言进行编程,并涉及到MAC层、路由协议以及可能的三层oS...
标题中的"ICT-104_CashAccepter_Protocol_DLL-master_c#.net_ICT-104_Master_1" 提供了关键信息,它指的是一个基于C# .NET平台的ICT-104纸币接收器协议的DLL(动态链接库)主项目。这个项目的重点是创建一个用于与...
“hci_uart”驱动通常由C++等编程语言编写,以适应Linux内核的编程规范。它涉及到的主要功能包括初始化UART接口、配置波特率、错误检测、数据包的收发以及中断处理等。在实现过程中,开发者需要理解Linux设备驱动...
在C++编程语言中实现DNP 3.0协议,可以为开发人员提供更大的灵活性和效率。C++是一种通用的、面向对象的编程语言,其强大的性能和丰富的库支持使得它成为构建复杂系统,如网络通信协议实现的理想选择。 DNP 3.0的...