美文网首页
iOS底层原理开篇

iOS底层原理开篇

作者: 長茳 | 来源:发表于2019-12-30 16:26 被阅读0次

iOS底层原理篇 主要是围绕底层进行源码分析-LLDB调试-源码断点-汇编调试,让自己以后回顾复习Runtime底层之美的😀😀
目录如下:
OC对象原理(一) alloc&init探索
OC对象原理(二) 内存对齐探索&malloc源码分析
持续更新中....更新有点慢请谅解....
文中有误的地方请指正,大家一起学习

魔性思考

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

分析解惑

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

咦??奇怪了,你这咋有这么清晰详细的堆栈信息呢?到这可能有些小可爱会问了?这其实是Xcode默认帮我们关了查看详细的堆栈信息,我们打开就行.如何打开呢? 如: 这其中我还加入了三个符号断点_objc_init,libdispatch_init,libSystem_initailizer,符号断点如何加呢?(请看OC对象原理(一) 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对象开始分析吧.

具体请看下文OC对象原理(一) alloc&init探索

相关文章

网友评论

      本文标题:iOS底层原理开篇

      本文链接:https://www.haomeiwen.com/subject/wxymoctx.html