协议(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
分享到:
相关推荐
主要包括: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 Bootloader的串口协议。 本文档主要描述 AT32 内置 bootloader 使用的 UART 协议,并详细介绍每个系列支持的协议命令, 以及协议的使用流程。 支持...
现阶段支持C 、JAVA、Python等三种编程语言。 为什么不只用XML?同XML相比,Protocol buffers在序列化结构化数据方面有许多优点(google官方提出): 更简单 数据描述文件只需原来的1/10至1/3 解析...
Hazelcast开放二进制客户端协议Hazelcast Open Binary Client Protocol定义和用于多种编程语言的代码生成器。Hazelcast开放二进制客户端协议定义协议是在protocol-definitions/*.yaml yaml文件中protocol-...
P4(Programming Protocol-Independent Packet Processors)是一种数据面的高级编程语言。他可以克服OpenFlow的局限。通过P4语言,我们可以定义我们想要的数据面。进而再通过南向协议添加流表项。
技术关键词: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)协议
#About Protocol FNTP 是 TCP 和 UDP 的组合作为混合传输层协议。 TCP 的工作速度比 UDP 慢,但它是可靠的,Flaxton FNTP 协议的基本思想是将 TCP 可靠性功能和 UDP 速度结合在一起。 使用 TCP 和 UDP 的这种组合...
TCP网络通信程序设计与实现 摘要: 目前,基于TCP/IP... 2.2 java网络编程技术 Java语言是在网络环境下诞生的,所以Java语言虽然不能说是对于网络编程的支持最好 的语言,但是必须说是一种对于网络编程提供良好支持的
是一种规范,用于以Solidity编程语言编写的以太坊区块链上的高阶令牌的抽象。 我们使用作为开发环境来编译,测试和部署我们的合同。 有关设置协议的更多详细信息,请参见。 有关我们的合同体系结构和已部署合同的更...
软件包cdp为使用Go编程语言编写的(CDP)提供了类型安全的绑定。 绑定是由根据最新协议定义生成的,并且主要用于Google Chrome或Chromium,但是它们可以与任何调试目标( , , 等)。 通过Chrome DevTools协议,...
我们正在寻找其他编程语言的第三方来共同努力。 在阅读规范。维护者当前的维护者(可以合并拉取请求的人员)是: 豪尔赫·维森特·- 贾斯汀· Justin Kaeser)- ŁukaszWawrzyk- ÓlafurPállGeirsson- 托马斯·...
James(Java Apache Mail Enterprise Server)是Apache组织的子项目,由Java语言编写的,整合了诸如POP3,SMTP等邮件协议的企业邮件服务器。 提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的...
08、第八课protocol buff学习 09.第九课自定义序列化协议之自定义序列化协议 10、第十课自定义数据包协议 11.第十一课粘包分包分析,如何避免socket攻击 12.分析设计一个聊天室的小项目 二、java NIO,AIO编程...
- 主要编程语言:Go - 文件构成:共85个文件,包括: - Go源代码文件:59个,涵盖了数据库的核心功能实现。 - Protocol Buffers定义文件:6个,用于接口和数据的序列化。 - Markdown文档:5个,提供了详细的开发...
通过中立的契约(独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能 单元更好的集成。目前来说,WebService是 SOA 的一种较好的实现方式,WebService采用 HTTP 作为传输协议,SOAP(Simple Object ...
通过中立的契约 (独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能 单元更好的集成。目前来说,WebService 是 SOA 的一种较好的实现方式,WebService 采用 HTTP 作为传输协议,SOAP (Simple ...
面向协议编程的教程,Swift3.0以后Apple提出的一种编程理念,充分发挥了Swift语言的特点,是进一步提高Swift水平不可多得的学习材料。高清英文版,目录齐全,而且可以自由编辑。
通过中立的契约(独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能 单元更好的集成。目前来说,WebService是 SOA 的一种较好的实现方式,WebService采用 HTTP 作为传输协议,SOAP(Simple Object ...