iOS底层原理篇 主要是围绕底层进行
源码分析
-LLDB调试
-源码断点
-汇编调试
,让自己以后回顾复习Runtime底层之美的😀😀
目录如下:
OC对象原理(一) alloc&init探索
OC对象原理(二) 内存对齐探索&malloc源码分析
持续更新中....更新有点慢请谅解....
文中有误的地方请指正,大家一起学习
魔性思考
漫漫的iOS底层很多很多,但是这些底层我们应该如何去分析呢?该从哪个地方入手呢?
我相信这也是大家在平时开发以及学习过程中存在的一些盲点和疑问的点.那么此时我有一个灵感,也可以说是一个线索,一条线路吧.那么这条线路是什么呢?就从我们的main
函数开始.就是我们的任何程序都会来自于整个程序的main
函数的启动.我们经常会发现一个点,发现什么点呢?就是我们的程序跑起来的时候,就会有一个调用堆栈,经常会发现有一个start
函数,main
函数等等一系列.或许,有人会产生相应的疑问的点,为什么会有start
函数或main
函数呢?
分析解惑
那么在这个过程中我们是如何去分析的呢?
我们就从main
函数开始入手,一切从最原始的开始入手.
来直接上代码:我们先在main
函数处打上断点,直接运行结果如下:



_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探索
网友评论