1厅克、動(dòng)態(tài)庫加載DllMain各種初始化
2茶鹃、_objc_init各種初始化:environ init 释液、 tls init 全释、static init、lock init 误债、exception init
3浸船、mapimage里面主要工作是load image也就是加載資源,是 第一次的時(shí)候sel init寝蹈、autoreleasepool初始化李命、sidetable init
4、_read_images開始讀取資源箫老,readclass發(fā)現(xiàn)所有的class封字,可以理解為讀取class信息,具體就是往map里面存入class的信息,然后再進(jìn)行重新映射這里可能是對于一些需要重新映射的class進(jìn)行重新映射(修復(fù)類列表和懶加載列表還沒有映射的情況)阔籽,下面就是注冊所有的sel方法流妻,然后就是readprotocol遍歷head里面class對應(yīng)的protocol都讀進(jìn)來存入到map,和class類似笆制,也需要remap一下protocol绅这,然后實(shí)現(xiàn)所有的class,這時(shí)候把class的data部分進(jìn)行實(shí)例化在辆,需要注意的是data現(xiàn)在還只是一個(gè)空的并沒有內(nèi)容证薇,然后構(gòu)建父子結(jié)構(gòu)、元類結(jié)構(gòu)匆篓,然后methodizeClass函數(shù)里會(huì)賦值data的內(nèi)容把methods浑度、properties、protocols加進(jìn)去鸦概,再把category里面的內(nèi)容attach進(jìn)來箩张,具體說下category里面的內(nèi)容處理是會(huì)插入到class原有的methodlist 、protocollist完残、property list 前面的伏钠,所以尋址的時(shí)候,是先找到category的實(shí)現(xiàn)谨设,也就是實(shí)現(xiàn)了對于class原有實(shí)現(xiàn)的覆蓋熟掂;通過源碼的閱讀發(fā)現(xiàn)后面才是真正的進(jìn)行category list的創(chuàng)建和存儲(chǔ),存儲(chǔ)到map里面扎拣,然后再attach到class上赴肚,我認(rèn)為在前面的methodizeClass函數(shù)主要沒有對于category的添加,而實(shí)際的添加就是在后面這一塊代碼進(jìn)行的category的處理二蓝。