协议和范畴类

协议和范畴类,第1张

概述协议: 协议可以用来声明能够在任何类中实现的方法,甚至那些实现该方法的类继承自别的类。协议方法定义的行为是独立于任何一个类的。协议可以定义一个要求其他类必须承诺实现的接口。也就是说,如果你的类实现了协议中的方法,那么这个类就承诺要完成该协议。 从实用的角度说来,协议定义了一系列方法,并建立起对象之间的“合约”。而这些对象不必是任何一个确定的类的实例。这个合约使得对象之间可以进行交流。某个对象想要告

协议:

协议可以用来声明能够在任何类中实现的方法,甚至那些实现该方法的类继承自别的类。协议方法定义的行为是独立于任何一个类的。协议可以定义一个要求其他类必须承诺实现的接口。也就是说,如果你的类实现了协议中的方法,那么这个类就承诺要完成该协议。

从实用的角度说来,协议定义了一系列方法,并建立起对象之间的“合约”。而这些对象不必是任何一个确定的类的实例。这个合约使得对象之间可以进行交流。某个对象想要告诉另一个对象,马上将要面临的事件,或者想要询问关于那些事件的建议。

UIApplication 类实现了所需的应用行为。你不必为了接收简单的应用当前状态的消息而创建一个 UIApplication 的子类。UIApplication 类会调用指定的委托对象中的特定方法来传递那些消息。实现了 UIApplicationDelegate 协议方法的对象就能够接收到那些消息了,并且能够提供合适的反馈。

在承诺实现、或采用某个协议的接口代码中,协议的名称要写在父类名称后边的一对尖括号里(<…>)。在“你的第一个 iOS 应用”教程里,你采用了 UITextFIEldDelegate 协议:

@interface HelloWorldVIEwController : UIVIEwController <UITextFIEldDelegate> {
}
@end

在实现中,你无需声明协议方法。

协议的声明看起来和类接口很相似,不过不同的是协议没有父类,并且不含任何实例变量(但它们能够声明属性)。下面的例子展示如何声明只有一个方法的简单协议:

@protocol MyProtocol
- (voID)myProtocolMethod;
@end

对于许多委托协议而言,采用一个协议就等于是实现该协议中定义的方法。有些协议要求你明确声明你会支持该协议,而有些协议则是既包含必须实现的方法,也包含可选方法。


范畴类:

当你在 Objective-C 框架中浏览头文件时,你很快就会看到类似这样的语句:

@interface NSDate (NSDateCreation)

这行语句声明了一个范畴类(category),其语法是将范畴类的名称包裹在一对圆括号中。范畴类是 Objective-C 语言的一个特性,让你能够扩展某个类的接口,而无需创建它的子类。范畴类中的方法将成为此类的一部分(在你的程序作用域范围内),并会被此类的所有子类继承。你可以向此类(或它的子类)的任意一个实例发送消息来调用范畴类中声明的方法。

你可以利用范畴类在一个头文件里组织互相关联的方法声明。你甚至可以在不同的头文件中放入不同的范畴类声明。Cocoa touch 框架和 Cocoa 框架在几乎所有头文件中都利用了这个技术,代码才如此明晰。你还能使用匿名范畴类(也就是在圆括号中不写任何字符),这样可以把实例变量隐藏在私有的实现文件里。

总结

以上是内存溢出为你收集整理的协议和范畴类全部内容,希望文章能够帮你解决协议和范畴类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1055093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存