iOS底層探索一(底層探索方法)

前言

     相關文章:

iOS底層探索二(OC 中 alloc 方法 初探)

iOS底層探索三(內存對齊與calloc分析)

iOS底層探索四(isa初探-聯合體,位域,內存優化)

iOS底層探索五(isa與類的關係)  

iOS底層探索六(類的分析上)

iOS底層探索七(類的分析下)

iOS底層探索八(方法本質上)

iOS底層探索九(方法的本質下objc_msgSend慢速及方法轉發初探)

iOS底層探索十(方法的本質下-消息轉發流程)

作爲iOS開發,看底層源碼基本是必須的,但是很多人都想看源碼,但是入門無路,所以在進行底層探索之前,先介紹一篇文章來描述一下我一般是怎麼要找底層源碼的。

探索底層源碼出處:

  1. 下斷點 : control + in

  2. 符號斷點設置:例如alloc  源碼
  3. 代碼跟蹤
  4. 彙編探索

1.斷點調試設置

     例如我們使用alloc代碼進行下斷點 : control + in

     

當斷點到這裏時我們先不做操作,點擊鍵盤中的control鍵,此時代碼進入按鍵會有變化

此時我們點擊框中按鈕可以進入到彙編,點擊進入

我們可以看到alloc 底層首先會調用objc_alloc方法,當我們繼續進入時發現一隻是圖二,這裏就需要講到我們iOS底層東西了,在我們使用模擬器是,cpu內核使用的x86也就是電腦的架構,而我們手機使用的是armv7 ,armv7s和arm64,arm64E,架構,因爲使用不同架構,底層所選擇的方法也不一樣進入代碼也有區別;

所以在這裏如果要進入需要選擇爲真機調試;

修改爲真機調試後,我們可以看到alloc進入的是libobjc.A.dylib庫中的objc_alloc方法

2.符號斷點設置

       這個也是我們xcode中自帶的功能,因爲alloc方法在初始化是後會有很多調用,所以我們還是需要先讓代碼運行到[person alloc],之後我們點到添加符號斷點出,如下圖所示

添加完後,我們可以看到,底層確實有很多alloc方法,此時我們繼續執行代碼,如下如,依然可以看到底層是調用libobjc.A.dylib庫,這裏爲什調用的是[NSObject alloc]後續再進行詳細解釋

3.彙編調試

這個也是xcode中的工具,缺點是需要了解部分彙編知識;具體設置,如下圖所示xcode中頂部選擇Debug->DebugWorkflow->Always Show Disassembly,這裏我們運行後就能看到彙編指令了

進入彙編頁面如下圖所示:

很多人看到這裏就會有點懵,這裏我們只需要知道一些簡單的只是例如:bl 爲跳轉方法,add爲加法運算 sub爲減法運算等,這裏就不過多贅述了;22行打斷點進入;

我們發現依舊進入了我們熟悉的libobjc.A.dylib庫;調用的是objc_alloc方法;

以上就是我要介紹的3種看底層實現方法,

這裏附上蘋果開源代碼地址:https://opensource.apple.com/source/

我們要看的alloc方法在0bjc-750中新版本objc-756.2,可以直接下載進行編譯通過

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章