`
king_tt
  • 浏览: 2229351 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【编程语言】协议_Protocol

 
阅读更多

协议(protocol)是Objective-c中一个非常重要的语言特性,从概念上讲,非常类似于JAVA中接口. 一个协议其实就是一系列有关联的方法的集合(为方便后面叙述,我们把这个协议命名为myProtocol)。协议中的方法并不是由协议本身去实现,相反而是由遵循这个协议的其他类来实现。换句话说,协议myProtocol只是完成对协议函数的声明而并不管这些协议函数的具体实现。

声明协议

  1. @protocolmyProtocol<NSObject>
  2. @required
  3. -(void)protocolNameA:(NSString*)string;
  4. @optional
  5. -(void)protocolNameB:(NSString*)string;
  6. @end

第一行是声明这个协议的名字为myProtocol。尖括号中的NSObject本身也是一个协议,其中定义了很多基本的协议函数,比如performSelector,isKindOfClass,respondsToSelector,conformsToProtocol,retain,release等。

协议接口分为required和optional两类。required顾名思义是说遵守这个协议的那个类“必须要”实现的接口,而optional则是可以实现也可以不实现的。协议接口的定义和普通的函数定义是一样的。

最后一行@end表示协议定义结束。这个协议的定义通常是在.h文件中。


实现协议

  1. @interfacemyClass<myProtocol>
  2. @interfacemyClass:NSObject<myProtocol>
  3. @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_Application_Protocol_V1_1b.zip_modbus_protocol_swungvba

      《Modbus应用协议V1.1b》是一个详细介绍Modbus通信协议的重要文档,该文档以PDF格式存在于压缩包“Modbus_Application_Protocol_V1_1b.zip”中,其内容涉及了Modbus协议在V1.1b版本中的具体应用和规范。Modbus是一种...

      PyPI 官网下载 | surf.sparql_protocol-0.2_r110-py2.5.egg

      标签"Python库"揭示了这个资源的本质,即它是一个Python编程语言的软件库。Python库是Python程序设计中的重要组成部分,它们提供预定义的功能,帮助开发者快速实现特定任务,如网络请求、数据处理、图形界面等。surf...

      PyPI 官网下载 | jupyter_protocol-0.2.0-py3-none-any.whl

      3. **Python**:表明这个资源是针对Python编程语言的,与Python 3兼容。 4. **Python库**:`jupyter_protocol`是一个Python库,可供其他Python项目引用和使用,以实现与Jupyter内核的通信。 综上所述,`jupyter_...

      PyPI 官网下载 | edc_protocol-0.1.12-py3-none-any.whl

      "python 开发语言"表明它是用Python编程语言编写的,"后端"意味着这个库可能主要用于服务器端的开发工作,处理数据、提供服务等。"Python库"则直接点明这是一个可以被其他Python项目导入和使用的代码集合。 综上所...

      test_Protocol_Buffers

      Protocol Buffers是Google开发的一种数据序列化协议,它允许开发者定义数据结构,然后生成可以在各种编程语言中使用的代码,以便轻松地存储和交换数据。在这个特定的案例中,“test_Protocol_Buffers”可能是一个...

      protocol376_376.1-2009_376.1协议_376_376.1_376.1协议_源码.rar

      不过,从文件名来看,我们可以推断这个压缩包可能包含了与376.1协议相关的各种源代码文件,这些文件可能包括C、C++、Java或其他编程语言的实现。开发者通过解压并研究这些源码,可以深入了解协议的实现机制,例如...

      CARP_Protocol-master_nevergdl_routingforwsn

      源代码通常是用编程语言编写的,可能是C、C++或Java等,用于控制传感器节点如何选择路径,以及如何在WSN中有效地分发数据。 无线传感器网络是由大量小型、低功耗的设备组成,这些设备能够感知环境并进行通信。在WSN...

      smac.rar_ smac-stack-1.2.tar_SMAC的源码_WSN mac protocol_mac协议_s-ma

      标题中的"smac.rar_ smac-stack-1.2.tar_SMAC的源码_WSN mac protocol_mac协议_s-ma"提到了几个关键概念,首先是"SMAC",它代表了Sleep Mode MAC(睡眠模式MAC)协议,这是一种为无线传感器网络(WSN,Wireless ...

      sdk.rar_anviz_anviz sdk_meatylc_protocol

      4. **Vb6、DelphiDemo**:这两个文件或文件夹可能包含使用VB6(Visual Basic 6)和Delphi编程语言编写的示例代码或演示应用程序。这些示例可以帮助开发者学习如何在各自的编程环境中使用Anviz SDK。 5. **vb**:...

      Python库 | simple_protocol-0.1.9-py3-none-any.whl

      Python库“simple_protocol-0.1.9-py3-none-any.whl”是一个用于后端开发的工具,专为Python编程语言设计。该库的版本号是0.1.9,表明它可能已经历过多次迭代和改进,以提供更稳定和功能丰富的服务。其名称暗示它...

      80-V5348-1_J_Streaming_DLoad_Protocol_qcomqdl_qualcomm_源码.zip

      标题 "80-V5348-1_J_Streaming_DLoad_Protocol_qcomqdl_qualcomm_源码.zip" 暗示我们正在处理一个与Qualcomm公司的流式下载(Streaming DLoad)协议相关的源代码包。这个协议可能是Qualcomm Quick Download(QDL)的...

      test_Protocol_Buffers_c++

      标题 "test_Protocol_Buffers_c++" 指向的是一个使用 C++ 语言进行 Protocol Buffers(简称 Protobuf)测试的项目,而描述中提及的 "Protocol_Buffers 读取测试 caffe" 表明这个项目可能涉及到将 Protobuf 与深度...

      MC协议_三菱MC协议_三菱mc通信_MCMistibishi_PLC_

      在不同编程语言中实现MC协议通信,如C#、Python或VB.NET,主要涉及以下步骤: 1. **库的选择**:选择合适的串口通信库,如C#的System.IO.Ports命名空间,Python的pyserial库等。 2. **配置串口**:根据MC协议设置...

      protocol376_376.1-2009_376.1协议_376_376.1_376.1协议.zip

      源码通常由一系列编程语言(如C、C++、Java或Python)编写,包含了函数、类、变量等编程元素,用于实现协议规定的操作。 根据压缩包内的文件名"protocol376_376.1-2009_376.1协议_376_376.1_376.1协议_源码.zip",...

      达明机器人1.76_Common_Protocol_Final_中文.pdf

      文件标题为“达明机器人1.76_Common_Protocol_Final_中文.pdf”,此标题表明了文档的版本和语言。版本号“1.76”指的是该手册或者协议的特定更新版本,而“Final”可能意味着这是最终版,表明了稳定性和完成度。标题...

      mac protocol.rar_Mac matlab_layerss3o_mac_mac protocol_routing p

      标题中的"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

      标题中的"ICT-104_CashAccepter_Protocol_DLL-master_c#.net_ICT-104_Master_1" 提供了关键信息,它指的是一个基于C# .NET平台的ICT-104纸币接收器协议的DLL(动态链接库)主项目。这个项目的重点是创建一个用于与...

      hci_uart.rar_HCI_Protocol Stack_bluetooth_bluetooth uart _linux

      “hci_uart”驱动通常由C++等编程语言编写,以适应Linux内核的编程规范。它涉及到的主要功能包括初始化UART接口、配置波特率、错误检测、数据包的收发以及中断处理等。在实现过程中,开发者需要理解Linux设备驱动...

      dnp.rar_DNP_Protocol DNP C++_dnp 3.0_dnp_ c

      在C++编程语言中实现DNP 3.0协议,可以为开发人员提供更大的灵活性和效率。C++是一种通用的、面向对象的编程语言,其强大的性能和丰富的库支持使得它成为构建复杂系统,如网络通信协议实现的理想选择。 DNP 3.0的...

    Global site tag (gtag.js) - Google Analytics