前言
相關文章:
iOS底層探索九(方法的本質下objc_msgSend慢速及方法轉發初探)
作爲iOS開發,看底層源碼基本是必須的,但是很多人都想看源碼,但是入門無路,所以在進行底層探索之前,先介紹一篇文章來描述一下我一般是怎麼要找底層源碼的。
探索底層源碼出處:
-
下斷點 : control + in
- 符號斷點設置:例如alloc 源碼
- 代碼跟蹤
- 彙編探索
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,可以直接下載進行編譯通過