iOS底层原理探索篇 主要是围绕底层进行
源码分析
-LLDB调试
-源码断点
-汇编调试
,让本身之后回顾复习的😀😀函数目录以下:源码分析
iOS底层原理探索 一 开篇post
漫漫的iOS底层不少不少,可是这些底层咱们应该如何去分析呢?该从哪一个地方入手呢? 我相信这也是你们在平时开发以及学习过程当中存在的一些盲点和疑问的点.那么此时我有一个灵感,也能够说是一个线索,一条线路吧.那么这条线路是什么呢?就从咱们的main
函数开始.就是咱们的任何程序都会来自于整个程序的main
函数的启动.咱们常常会发现一个点,发现什么点呢?就是咱们的程序跑起来的时候,就会有一个调用堆栈,常常会发现有一个start
函数,main
函数等等一系列.或许,有人会产生相应的疑问的点,为何会有start
函数或main
函数呢?code
那么在这个过程当中咱们是如何去分析的呢? 咱们就从main
函数开始入手,一切从最原始的开始入手. 来直接上代码:咱们先在main
函数处打上断点,直接运行结果以下: cdn
_objc_init
,
libdispatch_init
,
libSystem_initailizer
,符号断点如何加呢?(请看
iOS底层原理探索 一 alloc&init探索文中有提到) 从结果能够看到,在咱们的
start
函数开始以前,他不在是简简单单的
start
函数或者
main
函数,而是
_dyld_start
了.那么咱们会从咱们的
_dyld_start
开始,到
start_sim
再到
dyld::_main
,那么在
dyld::_main
以后会来到
libSystem_initailizer
,这也就从咱们当前的
dyld
来到
libSystem
,那么
libSystem
以后的下一个流程就是咱们的整个iOS的底层.那么
libSystem
以后又是什么呢?就是咱们的
libdispatch
,而不是咱们的
libobjc
,这期间会在这个过程当中会注册一个
notification register
函数,会注册一个地方,注册一个函数回调会注册到什么地方呢?不知道,咱们会从先从主线路走.那么在
libdispatch
以后会就会看到一些很是熟悉的函数好比说
_os_object_init
,它会进入什么呢?它会进入真正的
_objc_init
,以后会进入
_dyld_objc_notify_register
函数,开始进行当前的images的loader,map等.images里面包含了类-分类-属性-协议-SEL-方法等等一系列的加载,这就开始落地到了整个runtime的各个部分的展开.以后在来到咱们熟悉的
main
函数.
具体请看下文iOS底层原理探索 一 alloc&init探索对象