`
king_tt
  • 浏览: 2110195 次
  • 性别: 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


  • 分享到:
    评论

    相关推荐

      acl C++跨平台库.rar

      主要包括:lib_acl(用 C 语言写的基础库)、lib_protocol(用 C 语言写的一些网络应用协议库)、lib_acl_cpp(用 C++ 语言编写,封装了 lib_acl/lib_protocol 两个库,同时增加更多实用的功能库)、 lib_fiber(用 ...

      PM0005-AT32-Bootloader-UART-Protocol-ZH-V2.0.0 雅特力AT32F403

      PM0005_AT32_Bootloader_UART_Protocol_ZH_V2.0.0 雅特力AT32F403 Bootloader的串口协议。 本文档主要描述 AT32 内置 bootloader 使用的 UART 协议,并详细介绍每个系列支持的协议命令, 以及协议的使用流程。 支持...

      google开源的数据序列化工具Protocol Buffers.zip

      现阶段支持C 、JAVA、Python等三种编程语言。 为什么不只用XML?同XML相比,Protocol buffers在序列化结构化数据方面有许多优点(google官方提出): 更简单 数据描述文件只需原来的1/10至1/3 解析...

      hazelcast-client-protocol:Hazelcast开放二进制客户端协议

      Hazelcast开放二进制客户端协议Hazelcast Open Binary Client Protocol定义和用于多种编程语言的代码生成器。Hazelcast开放二进制客户端协议定义协议是在protocol-definitions/*.yaml yaml文件中protocol-...

      可编程交换机p4语法文档.pdf

      P4(Programming Protocol-Independent Packet Processors)是一种数据面的高级编程语言。他可以克服OpenFlow的局限。通过P4语言,我们可以定义我们想要的数据面。进而再通过南向协议添加流表项。

      破解Objective-C面试:笑到最后的技术攻略!.zip

      技术关键词:Objective-C、iOS开发、Mac OS X、编程语言、面向对象编程、内存管理、自动引用计数(ARC)、协议(protocol)、类扩展(category)、键值观察(KVO)、键值编码(KVC)、Block、Delegate模式、多态性、...

      软件工程师的技术规范集萃

      一、编程类 设计模式速查手册 C/C++语言编码规范 Java编码规范 Delphi 程序员代码编写标准指南 二、网络应用类 可扩展标记语言(XML)1.0(第二版) SOAP协议规范 IP协议(Internet Protocol) 传输控制协议...

      nim-dnsprotocol:用于Nim编程语言的域名系统(DNS)协议

      nim-dnsprotocol:用于Nim编程语言的域名系统(DNS)协议

      fntp-c:用C编程语言实现Fntp协议

      #About Protocol FNTP 是 TCP 和 UDP 的组合作为混合传输层协议。 TCP 的工作速度比 UDP 慢,但它是可靠的,Flaxton FNTP 协议的基本思想是将 TCP 可靠性功能和 UDP 速度结合在一起。 使用 TCP 和 UDP 的这种组合...

      java网络编程技术课程设计.doc

      TCP网络通信程序设计与实现 摘要: 目前,基于TCP/IP... 2.2 java网络编程技术 Java语言是在网络环境下诞生的,所以Java语言虽然不能说是对于网络编程的支持最好 的语言,但是必须说是一种对于网络编程提供良好支持的

      set-protocol-contracts::control_knobs:设置协议智能合约

      是一种规范,用于以Solidity编程语言编写的以太坊区块链上的高阶令牌的抽象。 我们使用作为开发环境来编译,测试和部署我们的合同。 有关设置协议的更多详细信息,请参见。 有关我们的合同体系结构和已部署合同的更...

      cdp:软件包cdp为使用Go编程语言编写的Chrome DevTools协议(CDP)提供了类型安全的绑定

      软件包cdp为使用Go编程语言编写的(CDP)提供了类型安全的绑定。 绑定是由根据最新协议定义生成的,并且主要用于Google Chrome或Chromium,但是它们可以与任何调试目标( , , 等)。 通过Chrome DevTools协议,...

      build-server-protocol:用于集成开发环境的IDE协议和构建工具,以进行有关编译,运行,测试,调试等方面的通信

      我们正在寻找其他编程语言的第三方来共同努力。 在阅读规范。维护者当前的维护者(可以合并拉取请求的人员)是: 豪尔赫·维森特·- 贾斯汀· Justin Kaeser)- ŁukaszWawrzyk- ÓlafurPállGeirsson- 托马斯·...

      JAVAMail邮箱服务器搭建步骤详解

      James(Java Apache Mail Enterprise Server)是Apache组织的子项目,由Java语言编写的,整合了诸如POP3,SMTP等邮件协议的企业邮件服务器。 提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的...

      Java视频教程 Java游戏服务器端开发 Netty NIO AIO Mina视频教程

      08、第八课protocol buff学习 09.第九课自定义序列化协议之自定义序列化协议 10、第十课自定义数据包协议 11.第十一课粘包分包分析,如何避免socket攻击 12.分析设计一个聊天室的小项目 二、java NIO,AIO编程...

      Go语言实现的多元数据结构Rosedb数据库源码

      - 主要编程语言:Go - 文件构成:共85个文件,包括: - Go源代码文件:59个,涵盖了数据库的核心功能实现。 - Protocol Buffers定义文件:6个,用于接口和数据的序列化。 - Markdown文档:5个,提供了详细的开发...

      JAVA 的WebService 支持

      通过中立的契约(独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能 单元更好的集成。目前来说,WebService是 SOA 的一种较好的实现方式,WebService采用 HTTP 作为传输协议,SOAP(Simple Object ...

      JAVA的WebService支持讲解

      通过中立的契约 (独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能 单元更好的集成。目前来说,WebService 是 SOA 的一种较好的实现方式,WebService 采用 HTTP 作为传输协议,SOAP (Simple ...

      Protocol Oriented Programming (Swift 4)

      面向协议编程的教程,Swift3.0以后Apple提出的一种编程理念,充分发挥了Swift语言的特点,是进一步提高Swift水平不可多得的学习材料。高清英文版,目录齐全,而且可以自由编辑。

      JAVA的WebService支持.pdf

      通过中立的契约(独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能 单元更好的集成。目前来说,WebService是 SOA 的一种较好的实现方式,WebService采用 HTTP 作为传输协议,SOAP(Simple Object ...

    Global site tag (gtag.js) - Google Analytics