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探索對象

相關文章
相關標籤/搜索