zoukankan      html  css  js  c++  java
  • Objective-C 协议(protocol)二

    我们前面提到了OOP的继承,我们说Objective-C不像C++可以有多重继承,Objective-C是单一继承的,如果想要做到一个类别同时拥有多种型别的能力,我们就可以通过协议来实现。Objective-C中的协议就是java中的接口(interface),在Java中用”interface”这个关键字,在Objective-C则是用”@protocol”(要特别注意不要把interface跟protocol搞混了,在Objective-C的interface等于java的class,而protocol则是相当于java中的interface).

    定义Protocol很简单,在声明文件(h文件)中通过关键字@protocol定义,然后给出Protocol的名称,方法列表,然后用@end表示Protocol结束。在@end指令结束之前定义的方法,都属于这个Protocol。

    09_Protocol_2

    除非你是为特定的类编写协议,可以写在相关类的h文件中,否则可以单独放在一个h文件中.这里还有两个关键字,@required和@optional,表 示如果要实现这个协议,那么添加@required注解的方法是必须要实现的,添加@optional注解的方法则是可选的,这两个注解关键字是在 Objective-C 2.0之后加入的语法特性。如果不注明,那么方法默认是@required的,必须实现。

    Protocol本身是可以继承的,例如:

    如果你要实现ProtocolB,那么methodA和methodB都需要实现。

    与java相比,接口使用的关键字不一样,语法也不一样.在承诺实现、或采用某个协议的接口代码中,协议的名称要写在父类名称后边的一对尖括号里(<…>),实现多个协议则用逗号(,)分隔:

    09_Protocol 分类也可以实现协议,说法如下:

    09_Protocol_3

    协议不引用任何类,它是类无关的(classless),任何类都可以实现定义好的Protocol。如果我们想知道某个类是否实现了某个Protocol,可以使用conformsToProtocol进行判断,如下:比如在使用optional类型的protocal时就需要使用这种方法来判断的确有执行这个方法

    这里使用@protocol指令用于获取一个协议名称,并产生一个Protocol对象,并作为conformsToProtocol:的参数.为了测试obj是否实现了协议中的某一个方法,可以编写以下代码:

    了解更多信息可以查看iOS Developer Library中关于Protocol的介绍: Working with Protocols

  • 相关阅读:
    中国的北斗导航授时系统推进5G网络的时间同步
    北斗组网成功,北斗授时(NTP时钟服务器)新风口
    标准化考场时钟同步系统推进智能化校园建设
    智慧医疗分支:医院时钟系统(子母钟系统)
    【京准电子】标准化考场时钟系统方案
    【bWAPP】0X03 HTML Injection
    【bWAPP】0X02 HTML Injection
    【WebGoat】0X00 安装教程
    【bWAPP】0X01 HTML Injection
    【bWAPP】0X00 安装教程
  • 原文地址:https://www.cnblogs.com/lisa090818/p/3311595.html
Copyright © 2011-2022 走看看