OC中的协议

来源:互联网 发布:?+?=123风靡网络 编辑:程序博客网 时间:2024/05/01 09:07

       在objective-c程序设计中,我们在定义有些类的时候,这些类需要遵循某些协议。问题来了,那么协议到底是什么了?

       协议是多个类共享的一个方法列表。协议中列出的方法没有相应的实现,可以由其他类来实现。协议提供一种方式,用指定的名称定义一组多少有点相关的方法。这些方法通常有文档说明,从而可以知道他们是如何执行的。当然,也可以在自己的类定义中实现它们。

       协议列出了一组方法,有些可以是选择实现,有些是必须实现。如果决定实现特定协议的所有方法,也就必须遵守这项协议。可以定义协议中的所有方法都是必须实现的,也可以都是选择实现的。

       下面来看以下Foundation框架下的头文件NSObject.h中定义NSCopying协议的方式:

       ......

       @protocol NSCopying

       -  (id) copyWithZone: (NSZone *) zone;

       @end

@protocol 是定义协议的指令,后面则是协议名称。

       如果你的类采用NSCopying协议,则必须实现名为 copyWithZone:的方法。通过在@interface行的一对尖括号 <......> 列出协议名称,可以告诉编译器你正在采用括号内的相关协议。这项协议的名称放在类名和它的父类名称之后,例如:

       @interface AddressBook:NSObject <NSCopying>

       这说明,AddressBook是父类为NSObject的对象,并且它遵守NSCopying协议。因为系统已经知道以前为这个协议定义的方法,所以不必在接口部分申明这些方法。但是,要在实现部分定义它们。

       在AddressBook的实现部分,编译器期望找到定义的 copyWithZone:方法。

       如果要采用多项协议的话,只需要在尖括号 <> 内添加用  ,隔开便可。编译器将期望在 AddressBook 的实现部分看到为这些协议列出的所有方法的实现。

0 0
原创粉丝点击