问题
想了解 iOS 的底层原理,我们该从哪里入手呢?
探索
首先作为 iOS 开发者,我们都知道新建一个工程,首先进入的就是 main 函数,那我们就在此处下个断点,然后使用在控制台使用 bt 查看下调用栈,如下:
我们发现在 main 函数之前系统还做了一些其他的事,可以看到两次 start 的调用,其位于 libdyld.dylib 底层库,为了进一步了解,我们来插入 _objc_init、libdispatch_init、libSystem_initializer 三个符号断点,如下:
断点下好之后,我们重新运行我们的项目,就可以看到很多其他的调用栈了。
通过以上方式,可以查看到在 main 函数之前还涉及如下的一些底层库。
- libSystem.B.dylib(libSystem_initializer,连接系统函数库)
- libdispatch.dylib(libdispatch_init,对应系统 GCD)
- libobjc.A.dylib(_objc_init,对应底层 runtime)
发现
进入 main 函数之后,我们可以通过 bt 指令来查看系统调用了哪些库的全貌。
综上所述,我们可以知道要探索 iOS 底层原理,可以从 dyld 启动加载动态库、libSystem、以及类、分类、协议、属性、对象、runtime、runloop、kvc、kvo 等内容出发。