协议和范畴类
来源:互联网 发布:淘宝卖书包的店铺 编辑:程序博客网 时间:2024/06/16 11:33
协议:
协议可以用来声明能够在任何类中实现的方法,甚至那些实现该方法的类继承自别的类。协议方法定义的行为是独立于任何一个类的。协议可以定义一个要求其他类必须承诺实现的接口。也就是说,如果你的类实现了协议中的方法,那么这个类就承诺要完成该协议。
从实用的角度说来,协议定义了一系列方法,并建立起对象之间的“合约”。而这些对象不必是任何一个确定的类的实例。这个合约使得对象之间可以进行交流。某个对象想要告诉另一个对象,马上将要面临的事件,或者想要询问关于那些事件的建议。
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 框架在几乎所有头文件中都利用了这个技术,代码才如此明晰。你还能使用匿名范畴类(也就是在圆括号中不写任何字符),这样可以把实例变量隐藏在私有的实现文件里。
- 协议和范畴类
- 协议和范畴类
- Objective-C 基础,类和对象,方法和消息,已声明的属性和存取方法,块对象,协议和范畴类,预定义类型和编码策略
- Objective-C 基础,类和对象,方法和消息,已声明的属性和存取方法,块对象,协议和范畴类,预定义类型和编码策略
- 辩证法三大规律和五大范畴
- Haskell的monad和范畴论的探讨
- 几个范畴中的字符替换(正则表达式和函数的结合运用)
- [企业管理]项目管理的范畴和职能分类——项目是如何崩溃的
- 阿鲁·萨丹拉彻:分享经济的概念和范畴在不断扩大
- SEC:加密货币和分布式账本技术属于网络部门管辖范畴
- 范畴及范畴论的理解
- 类和协议
- 使用分类向某个现有类添加方法(类扩展,范畴)
- 范畴论入门文章
- log4j的应用范畴
- Haskell与范畴论
- 唯物辩证法的基本范畴
- Haskell 的范畴
- 检查ipad,iphone的定位功能是否打开
- 请教大虾们分布式文件系统的问题
- mongodb like查询
- linux下不使用useradd命令,手工新建特殊账号
- 大数据从业者市场现状:薪酬持续增长 人才缺口巨大
- 协议和范畴类
- Getting started with IUNIVERS
- dataGridView 排除第一行排序
- 我也来说“瓷”
- 使用CreateFile()打开COM10及以上串行口
- Cloudera Flume介绍
- Android SharedPreferences的使用
- CopyU! v2插件系统的设计基本上完成了
- TinyXML 的使用