一探索方式?
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?之類的初始化方法來做一些初始化操作。

