objc-runtime梳理一概览

29次阅读

共计 791 个字符,预计需要花费 2 分钟才能阅读完成。

runtime 概览

Objective- C 这个语言,基本思路是把上层语法特性在编译器里都翻译成 c 层面的调用,调用的目标,就是 runtime 库了。

最早的时候我曾经有个傻傻的想法,是不是每个 Objc 程序都打包了一份 runtime 进去 … 真实的实现当然不会这么蠢啦,系统里会有个叫 libobjc.A.dylib 的动态库,每个 Objc 程序都会去调用它。

如何学习 runtime

前面我们提到 Objc 实际上是转译为 C 再加上 runtime。因此这里一方面是关注 runtime 本身的实现,另一方面也要关注其转译的过程。

1. runtime 源码

runtime 源码。官方源码,这里有历代版本的,比较全。github 上的 objc4,也是官方的,不过看起来比苹果自家网站发布的要旧一些,不过区别不大。

直接编译会缺少各种依赖,可以在 github 找别人已经处理好的代码直接运行。

2. clang 的转译

前面有提到,Objc 是把上层语法编译成 c 语法的,因此这个转译的过程也非常关键。

clang 提供了这种显式转译的能力:clang -rewrite-objc main.m

通过这条指令可以把 Objc 代码转为 C 代码,便于分析底层实现。

另外需要注意的是,这种转译的能力跟实际的编译可能并没有保证完全一致,但作为参考是足够了。

参考资料

官方资料和其它博客文章等。

官方的找到两份:

Objective-C Runtime:官方 API 文档

Objective-C Runtime Programming Guide:官方教程

个人在学习过程中看到的比较好的资料:

objc 的 Runtime:相对宏观的了解

知乎讨论该如何阅读 Objective-C runtime 源码?

objc 源码解析 -ObjectiveC 对象结构对 Class,Object 的底层结构这块讲得很清晰。

analyze 系列,除了 objc 的 runtime 之外,还有别的源码分析、架构设计等,很多精品

正文完
 0