objective-C运行时编程指南之运行时交互

来源:互联网 发布:金蝶数据库安装教程 编辑:程序博客网 时间:2024/04/21 00:25

运行时交互

Objective-C程序和运行时系统在三个不同层次上就行交互:通过Objective-C源代码;通过定义在Foundation框架中的NSObject类里的方法;通过直接调用运行时方法。

Objective-C源代码

通常情况下,运行时系统是在后台自动地进行工作的。你只是使用它来写和编译Objective-C源代码。

当你编译包含Objective-C类和方法的代码的时候,编译器会创建实现了语言动态特性的数据结构和方法调用。数据结构捕捉在类和分类定义以及在协议的声明中被找到的信息;它们包含在Objective-C编程语言中“定义类”和“协议”中被讨论的类和协议对象,还有从源代码中精炼出来的方法选择器、实例变量模板以及其他信息。最重要的运行时方法是发送消息,正如在“消息”中描述的。它是被源代码消息表达式触发的。

NSObject方法

Cocoa中的大部分的对象都是NSOject类的子类,因此大部分对象继承了它定义的方法。(NSProxy类是个显著的例外,见“消息发送”以获得更多信息。)它的方法因此建立的行为被每一个实例和每一个类对象继承。然而,在少数情况下,NSObject类仅仅定义一个应该怎么做事情的模板,它本身并不提过所有必须的代码。

例如,NSObject类定义了一个返回值为描述类内容的字符串的description实例方法。这个方法主要被用来调试——GDB print-object命令打印方法返回的字符串。NSObject的方法实现不知道类到底包含什么,因此它返回了一个带对象的名字和地址的字符串。NSObject的子类可以实现这个方法类返回更详细的信息。例如,Foundation框架中的NSArray类返回一个它包含的对象的描述列表。

一些NSObject的方法简单查询了运行时系统的信息。这些方法允许对象执行自查。举一些这样的方法例子:class方法要求一个对象来标示它的类,isKindOfClass: 和 isMemberOfClass:方法测试一个对象在继承层级结构中的位置;respondsToSelector:

方法暗示一个对象是否接受一个特定的消息;conformsToProtocol:方法暗示一个对象是否要求实现一个特定的协议方法;methodForSelector:方法提供一个方法实现的地址。像这些方法让一个对象能够自查本身。

运行时方法

运行时系统是一个带有一系列位于/usr/include/objc目录下的头文件中的方法和数据结构组成的公用的接口的动态分享库。当你写Objective-C代码的时候这些方法中的多数都允许你使用纯C语言来重复编译器的工作。其他的方法通过NSObject类的方法形成基本的功能性输出。这些方法使开发运行时系统的接口成为可能并且产生了增强开发环境的工具;当我们用Objective-C进行编程的时候这些不是必须的。然而,当写Objective-C程序的时候有些运行时方法偶尔会有用。所有这些方法都被记录在Objective-C运行时参考中。

原创粉丝点击