




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
协议和代理协议协议是一种特殊的程序设计结构,用于声明专门被别的类实现的方法协议在以下场合非常有用:声明需要由别的类实现的方法声明未知类的接口笼络一些互相之间没有继承关系的类的相似点2声明由他人来实现的接口类和类目的接口声明是严格与特定的类关联的,尤其是由本类实现的方法的声明协议声明的方法与任何特定的类都无关,它可以被任何(还可能是很多)类来实现3协议本质上就是一堆还未与任何类的实现代码关联的方法的声明比如,下面这些方法就可以用来组成一个协议:(void)mouseDown:(NSEvent
*)theEvent;(void)mouseDragged:(NSEvent
*)theEvent;(void)mouseUp:(NSEvent
*)theEvent;任何想要对鼠标事件进行反馈的类都可以接受(adopt)这个协议然后实现协议中的方法4因为协议中让方法的声明与类和继承树完全脱离干系,所以它可以用在一些类和类目无法发挥作用的地方协议的实现可以在任何地方,但是它并不关心谁实现了它,而是关心给定的类有没有实现它一个类实现了协议中声明的方法称为“确认”(confirm)了这个协议这样继承树中不相干的类也可以因为确认了相同的协议而被归到一起5如果你知道一个对象的类型,你便可以通过察看它的类定义中的接口声明来得知它能够响应哪些消息这种声明向使用者宣传了一个类可以调用的方法列表协议也同样向使用者宣传了他可以调用的方法,并且告知了实现者他应当实现的方法6对象之间的通信是两方面的:对象既可以发送消息,也可以接收消息如果你在开发中,在同一个工程里定义了消息的发送方和接受方两个类,那么他们之间的通信便变得简单:发送方包含接受方的接口文件,调用接口文件中定义的方法,向接受方传递消息然而,如果你开发了一个对象,它要向一个你还没定义的类的对象——有可能是你留给别人去写的类——发送消息,你没有接受方的接口,从而无法继续7你需要另一种方式来声明你的消息中要使用的,还未被声明的方法协议可以很好地解决这种问题:它告诉编译器你要使用的方法它同时告诉别的实现者你需要他们在别的类中帮助你实现的方法8协议的声明使用@protocol指令来声明一个协议:
@protocol
ProtocolNamemethod
declarations@end例如:@protocol
MyXMLSupport-
initFromXMLRepresentation:(NSXMLElement*)XMLElement;@property
(nonatomic,
readonly)(NSXMLElement*)XMLRepresentation;@end9可选协议方法协议中的方法可以通过@optional指令来标记为“可选”,即确认协议的类可以不必实现的方法相应地,也有@required指令来标记“必需”方法如果不做标记,默认是@required”的@protocol
MyProtocol-(void)requiredMethod;@optional-(void)anOptionalMethod;-(void)anotherOptionalMethod;@required-(void)anotherRequiredMethod;@end10接受协议接受协议在某些方面与声明父类很相似:它们都为类带来了额外的方法声明
它们都写在类的接口的类名后当一个类把一个协议的名字列在它的声明的父类名后的尖括号中,它被称为“接受”(adopt)了这个协议:@interface
ClassName
:
ItsSuperclass
<
protocollist>类目也可以接受协议:@interface
ClassName
(
CategoryName
)
<
protocollist
>一个类更可以同时接受多个协议,协议名之间用逗号隔开:@interface
Formatter
:
NSObject
<
Formatting,Prettifying
>11一个类如果接受了协议,那么它必需实现协议中声明的全部必需(@required)方法,否则会出现编译警报类如果接受了协议,那么必需包含协议的声明所在的头文件协议中声明的方法名不可与类中声明的方法名重名12确认协议一个类如果通过自己或者父类接受了协议,那么称它为“确认”(confirm)了这个协议这个类的实例也被成为确认了协议因为一个类必需通过实现协议中的所有必需方法来接受协议,所以确认了这个协议的对象也就相当于是能够响应这些方法13可以通过向一个对象发送confirmsToProtocol:消息来判断它是否确认了一个协议:if
(
!
[receiverconformsToProtocol:@protocol(MyXMLSupport)]
)
{//
Object
does
not
conform
to
MyXMLSupportprotocol//
If
you
are
expecting
receiver
to
implementmethods
declared
in
the//
MyXMLSupport
protocol,
this
is
probably
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论