Runtime到底是什么?
这个问题一直以来都困扰着大家的,做iOS开发,天天和Object-c打交道,却对runtime到底是什么感觉到很费解?
-
那么我们就先了解熟悉的东西:Object-C
-
做iOS开发做的最基本的操作:类,对象,属性,方法,—无论你做什么功能都离开这四个最基本的东东,包括网络请求,代理协议,通知,block,多线程,KVC/KVO,内存管理等等.都是用哪个类创建哪个对象,修改类的属性,对象的属性值,用类或者对象调用哪个方法实现哪些功能和需求.难道不是这样吗?
-
Objective-C是基于C语言加入了面向对象特性和动态运行时的功能,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和转发。
因此我们就抓住了Runtime的核心:
- 类,
- 对象,
- 属性,
- 方法.
那么就让我们来认识认识苹果官方开源的Runtime,
官方开源的Runtime
markgc特别显眼, 已经被ARC代替了, 基本只有占坑作用. 其中核心内容在runtime/下, 上面是核心runtime列表, 通过文件名可以看出objc-runtime到底提供了哪些内容, objc_object(id), class, protocol, method, selector, weak, sync, selector-table, RC, load, exception, cache(用于class的selector快速访问), message, 以及几个LLVM提供的基础map, 还有objc中Root Class NSObject的实现(其实就是和runtime做对接, 把自己连入runtime, 这样继承的子类就自动接入runtime了), 以及没有单独实现的autoreleasepool(在NSObject中实现)
其中Messengers就是objc runtime中消息转发的核心了, 纯汇编写成
打开objc.xcodeproj工程文件
objc.xcodeproj
objc的runtime明确的实体就是一个叫做libobjc.dylib的一个编译产物
runtime.h
-
苹果一贯的习惯,最重要的东西都写在最前面.
-
因此我们就寻找到了理解runtime的突破点:类,对象,属性,方法----
-
都是满满的结构体啊,满满的结构体啊,满满的结构体啊,重要的事情说三遍
Runtime(运行时机制)理解
-
runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API。
-
平时编写的OC代码, 在程序运行过程中, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者
-
Objective-C需要Runtime系统来动态创建类和对象,进行消息发送和转发。
runtime的作用
runtime是属于OC的底层, 可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)。
1.在程序运行过程中, 动态创建一个类(比如KVO的底层实现)2.在程序运行过程中, 动态地为某个类添加属性\方法, 修改属性值\方法
3.遍历一个类的所有成员变量(属性)\所有方法
点开这里看看Runtime的开发中的使用 iOS 开发 Runtime 运行时机制 完全解读
未完待续
后面的文章将会陆陆续续介绍Runtime中对于类,对象,消息机制的深入研究,KVC/KVO属性操作的底层原理

本文探讨了iOS开发中的Runtime概念,它是Objective-C的基础,提供动态创建类和对象的能力。Runtime核心包括类、对象、属性和方法。文章介绍了苹果开源的Runtime库,重点关注objc_object、class、protocol、method等关键结构,并指出Runtime是OC幕后工作者,负责消息发送和转发。通过Runtime,开发者可以实现运行时的动态添加属性和方法,以及遍历类的成员变量和方法。后续将深入讨论Runtime在KVC/KVO等特性中的应用。
1765

被折叠的 条评论
为什么被折叠?



