iOS Runtime详解(新手也看得懂)
需积分: 0 162 浏览量
更新于2020-08-26
收藏 358KB PDF 举报
iOS Runtime 是Objective-C编程语言的核心组成部分,它是一个运行时库,负责实现Objective-C的动态特性,如消息传递、动态类型和方法解析等。本文将深入探讨Runtime的基本概念、消息传递机制以及消息转发的过程。
Runtime是Objective-C的基石,它扩展了C语言并引入了Smalltalk式的消息传递。Objective-C的动态特性使得程序在运行时可以改变类的行为、创建新的类和对象,这些都离不开Runtime的支持。Runtime分为“modern”和“legacy”两个版本,现代版本适用于iOS和macOS 10.5以后的64位系统,而旧版本则用于较早的32位系统。
Runtime的核心之一是消息传递。当我们在Objective-C中调用一个方法,如`[obj foo]`,在编译后会转换为`objc_msgSend(obj, @selector(foo))`。Runtime执行消息传递的步骤如下:
1. 通过对象`obj`的`isa`指针找到对应的类。
2. 在类的`method list`中查找方法`foo`。
3. 如果当前类没有找到`foo`,Runtime会递归地在超类中查找。
4. 找到`foo`的实现(IMP)后,执行该方法。
为了提高效率,Runtime使用了缓存(`objc_cache`),将常用方法存储起来,下次调用时可以直接从缓存中获取,无需遍历整个`method list`。
`objc_msgSend`是实现消息传递的关键函数,它接收对象和选择器(SEL)作为参数。在Objective-C中,对象是`objc_object`结构体的实例,类是`objc_class`结构体,方法则是`objc_method_list`中的条目。`objc_class`包含了指向父类的指针、类名、版本信息以及方法列表等。
消息转发机制在找不到对应方法时发挥作用。当一个消息无法在接收者及其祖先类中找到相应的方法实现时,Runtime会启动转发机制,包括两个阶段:
1. 默认消息转发:对象有机会通过实现`-forwardingTargetForSelector:`方法指定另一个对象来处理消息。
2. 完整的消息转发:如果默认转发失败,对象可以通过`-forwardInvocation:`方法处理`NSInvocation`对象,或者自定义消息转发行为,例如动态添加方法或抛出异常。
了解Runtime的这些基础知识对于提升Objective-C的编程技巧至关重要,它可以帮助开发者更好地理解和调试代码,甚至在遇到难题时从系统层面寻找解决方案。熟悉Runtime的API和底层机制,可以让我们编写出更高效、更灵活的Objective-C程序。
weixin_38629920
- 粉丝: 6
- 资源: 914
最新资源
- java项目之高校学生选课系统项目源代码.zip
- 小米15工程固件 可以用于修改参数 修复tee损坏 修复底层分区 会用的下载
- JSP+SQL学生考试成绩分析(源代码+论文)(2024pp).7z
- java项目之华奥汽车销售集团网源代码.zip
- JSP+SQL网站流量统计管理系统(源代码+论文)(2024h6).7z
- JSP+SQL网上选课系统(源代码+论文+答辩PPT)(2024h6).7z
- jsp+mysql在线考试系统论文(2024ra).7z
- JSP+Struct+MySql基于BBS管理系统设计与实现(源代码+论文+中英资料+开题报告+答辩PPT)(2024el).7z
- jsp+mysql远程餐厅预约系统-毕业设计(2024lq).7z
- JSP+SQLCD销售管理系统(源代码+论文+英文文献)(20241f).7z
- jsp+sql城乡信息管理(系统)(2024cv).7z
- JSP+SQL办公自动化管理系统(源代码+论文)(202424).7z
- 空中俯视物体检测5-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- JSPSmart系统-考试管理及成绩查询模块的设计与开发(源代码+论文)(2024kj).7z
- jsp+sql即时通讯工具(系统+论文)(20249m).7z
- jsp基于WEB的考务管理系统的设计与实现(源代码+论文)(2024oj).7z