[OC Runtime编程指南_翻译]三、与运行时交互

简介: [OC Runtime编程指南_翻译]三、与运行时交互

Objective-C程序在三个不同的层次与运行时系统交互:通过Objective-C源码;通过在基础框架的NSObject类中定义的方法;通过直接调用运行时函数


Objective-C 源码


在大多数情况下,运行时系统在后台自动工作。您只需编写和编译Objective-C源代码就可以使用它。


当您编译包含Objective-C类和方法的代码时,编译器将创建实现语言动态特性的数据结构和函数调用。数据结构捕获类和类别定义以及协议声明中的信息;它们包括在用 _Objective-C _编程语言定义类协议时讨论的类和协议对象,以及方法选择器、实例变量模板和从源代码中提取的其他信息。主运行时函数是发送消息的函数,如 消息传递中所述。它由源代码消息表达式调用。


NSObject 方法


Cocoa中的大多数对象都是NSObject类的子类,因此大多数对象都继承它定义的方法。(一个值得注意的例外是NSProxy类;有关更多信息,请参阅 消息转发。)因此,它的方法建立了每个实例和每个类对象固有的行为。然而,在一些情况下,NSObject类只定义了一个模板,用于说明应该如何完成某件事;它本身并没有提供所有必需的代码。


例如,NSObject类定义了一个description实例方法,该方法返回一个描述类内容的字符串。这主要用于调试-GDB print object命令打印从该方法返回的字符串。这个方法的NSObject实现不知道类包含什么,所以它返回一个带有对象名称和地址的字符串。NSObject的子类可以实现此方法以返回更多详细信息。例如,基础类NSArray返回它包含的对象的描述列表。


有些NSObject方法只是查询运行时系统的信息。这些方法允许对象执行自省。此类方法的示例有类方法,它要求对象标识其类;isKindOfClass:和isMemberOfClass:,用于测试对象在继承层次结构中的位置;respondsToSelector:,指示对象是否可以接受特定消息;conformsToProtocol:,它指示对象是否声明实现特定协议中定义的方法;methodForSelector:,它提供方法实现的地址。像这样的方法给对象提供了自我反省的能力。


运行时函数


运行时系统是一个动态共享库,其公共接口由位于目录/usr/include/objc中的头文件中的一组函数和数据结构组成。这些函数中的许多都允许您使用纯C来复制编写Objective-C代码时编译器所做的工作。其他的则是通过NSObject类的方法导出的功能的基础。这些函数使得开发运行时系统的其他接口和生成扩展开发环境的工具成为可能;在Objective-C中编程时不需要它们。但是,在编写Objective-C程序时,一些运行时函数可能会有用。所有这些函数都记录在_Objective-C _运行时参考中。


相关文章
|
NoSQL IDE Go
Go 语言源码级调试器 Delve
Go 语言源码级调试器 Delve
107 0
|
3月前
|
Shell Go
Go 语言Air 工具使用入门
在Go开发中,频繁的手动重启应用以加载新代码既耗时又低效。为此,我们引入了Air——一款专为Go项目设计的自动重载工具。Air通过监听文件变化,实现代码更改后的自动编译与运行,极大提升了开发效率。本文将指导你完成Air的安装与配置,包括如何启动Air、忽略临时文件以及理解其工作原理,让Go项目开发更加流畅高效。
|
安全 Java 编译器
如何用 Go 调用 Windows API | 青训营笔记
如何用 Go 调用 Windows API | 青训营笔记
1073 0
|
存储 Go
Go Web编程实战(6)----反射
Go Web编程实战(6)----反射
124 0
Go Web编程实战(6)----反射
Go 开发常用操作技巧--接口
接口(interface)是对其他类型行为的抽象。接口是一种约束形式,其中只包括成员函数定义,不包含成员函数实现
121 0
Go 开发常用操作技巧--接口
|
缓存 编译器 iOS开发
[OC Runtime编程指南_翻译]四、消息传递
本章介绍如何将消息表达式转换为objc_msgSend函数调用,以及如何按名称引用方法。然后解释如何利用objc_msgSend,以及如果需要,如何绕过动态绑定。
121 0
[OC Runtime编程指南_翻译]四、消息传递
|
算法 iOS开发
[OC Runtime编程指南_翻译]六、消息转发
[OC Runtime编程指南_翻译]六、消息转发
150 0
[OC Runtime编程指南_翻译]六、消息转发
|
编译器 iOS开发
[OC Runtime编程指南_翻译]七、类型编码
[OC Runtime编程指南_翻译]七、类型编码
108 0
[OC Runtime编程指南_翻译]七、类型编码
|
API
OC底层知识(九) : Runtime(下)
OC底层知识(九) : Runtime(下)
98 0
OC底层知识(九) : Runtime(下)
|
存储 API C语言
OC底层知识(九) : Runtime(上)
OC底层知识(九) : Runtime
155 0
OC底层知识(九) : Runtime(上)