objc runtime梳理(一):概览

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之外,还有别的源码分析、架构设计等,很多精品

你可能感兴趣的:(runtime,objective-c,ios)