OC探索底層原理的思路

一探索方式?

1.下一個(gè)符號(hào)斷點(diǎn)Symbolic Breakpoint

2.打開反匯編顯示

3.直接下代碼斷點(diǎn)

具體操作方式為?Control+?in ?,in是指下圖的向下的箭頭按鈕



二探索libObjc源碼

我們下載了?libObjc?的源碼到我們的電腦上后是不能直接運(yùn)行的,我們需要進(jìn)行一定的配置才能實(shí)現(xiàn)源碼追蹤流程

下載鏈接? ? 下載鏈接配置介紹

配置好?libObjc之后,新建一個(gè)項(xiàng)目,然后運(yùn)行如下代碼:

1.alloc分析

Person?*objc? = [Person alloc];

然后我們直接下符號(hào)斷點(diǎn)objc_alloc,這樣就會(huì)先來到的是objc_alloc


之后會(huì)開始開辟內(nèi)存和且綁定到相應(yīng)的類

核心方法:

1.cls->instanceSize(extraBytes); //需要計(jì)算出需要的內(nèi)存空間小大

2.calloc ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /向/系統(tǒng)申請(qǐng)開辟內(nèi)存,返回指針地址

3.obj->initInstanceIsa(cls, hasCxxDtor); //關(guān)聯(lián)到相應(yīng)的類

alloc執(zhí)行流程圖

三init分析

init相比alloc來說,init內(nèi)部實(shí)現(xiàn)比較簡(jiǎn)單,先來到的是?_objc_rootInit?然后就直接返回?obj了。其實(shí)這里是一種抽象工廠設(shè)計(jì)模式的體現(xiàn),對(duì)于?NSObject自帶的?init方法來說,其實(shí)什么也沒干,但是如果你繼承于?NSObject的話,然后就可以去重寫?initWithXXX?之類的初始化方法來做一些初始化操作。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容