iOS底層原理探索篇 主要是圍繞底層進行
源碼分析
-LLDB調試
-源碼斷點
-彙編調試
,讓本身之後回顧複習的😀😀函數目錄以下:源碼分析
iOS底層原理探索 一 開篇post
漫漫的iOS底層不少不少,可是這些底層咱們應該如何去分析呢?該從哪一個地方入手呢? 我相信這也是你們在平時開發以及學習過程當中存在的一些盲點和疑問的點.那麼此時我有一個靈感,也能夠說是一個線索,一條線路吧.那麼這條線路是什麼呢?就從咱們的main
函數開始.就是咱們的任何程序都會來自於整個程序的main
函數的啓動.咱們常常會發現一個點,發現什麼點呢?就是咱們的程序跑起來的時候,就會有一個調用堆棧,常常會發現有一個start
函數,main
函數等等一系列.或許,有人會產生相應的疑問的點,爲何會有start
函數或main
函數呢?code
那麼在這個過程當中咱們是如何去分析的呢? 咱們就從main
函數開始入手,一切從最原始的開始入手. 來直接上代碼:咱們先在main
函數處打上斷點,直接運行結果以下: cdn
_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
函數.
具體請看下文iOS底層原理探索 一 alloc&init探索對象