iOS底层原理探索 一 开篇

iOS底层原理探索篇 主要是围绕底层进行源码分析-LLDB调试-源码断点-汇编调试,让本身之后回顾复习的😀😀函数

目录以下:源码分析

iOS底层原理探索 一 开篇post

iOS底层原理探索 一 alloc&init探索学习

iOS底层原理探索 一 内存对齐&malloc源码分析spa

iOS底层原理探索 一 isa原理与对象的本质调试

魔性思考

漫漫的iOS底层不少不少,可是这些底层咱们应该如何去分析呢?该从哪一个地方入手呢? 我相信这也是你们在平时开发以及学习过程当中存在的一些盲点和疑问的点.那么此时我有一个灵感,也能够说是一个线索,一条线路吧.那么这条线路是什么呢?就从咱们的main函数开始.就是咱们的任何程序都会来自于整个程序的main函数的启动.咱们常常会发现一个点,发现什么点呢?就是咱们的程序跑起来的时候,就会有一个调用堆栈,常常会发现有一个start函数,main函数等等一系列.或许,有人会产生相应的疑问的点,为何会有start函数或main函数呢?code

分析解惑

那么在这个过程当中咱们是如何去分析的呢? 咱们就从main函数开始入手,一切从最原始的开始入手. 来直接上代码:咱们先在main函数处打上断点,直接运行结果以下: cdn

咦??奇怪了,你这咋有这么清晰详细的堆栈信息呢?到这可能有些小可爱会问了?这实际上是Xcode默认帮咱们关了查看详细的堆栈信息,咱们打开就行.如何打开呢?
如:
这其中我还加入了三个符号断点 _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函数.

这里的分析角度-思惟都是比较有意思的.接下来,咱们先从咱们你们都比较熟悉的OC对象开始分析吧.

具体请看下文iOS底层原理探索 一 alloc&init探索对象

相关文章
相关标签/搜索