iosApp的整個(gè)調(diào)用順序?
1)dyld 開始將程序二進(jìn)制文件初始化?
2)交由ImageLoader 讀取 image捏悬,其中包含了我們的類瓢颅,方法等各種符號(hào)(Class救巷、Protocol 幌墓、Selector何暇、 IMP)?
3)由于runtime 向dyld 綁定了回調(diào)陶夜,當(dāng)image加載到內(nèi)存后,dyld會(huì)通知runtime進(jìn)行處理?
4)runtime 接手后調(diào)用map_images做解析和處理?
5)接下來load_images 中調(diào)用call_load_methods方法裆站,遍歷所有加載進(jìn)來的Class条辟,按繼承層次依次調(diào)用Class的+load和其他Category的+load方法?
6)至此 所有的信息都被加載到內(nèi)存中?
7)最后dyld調(diào)用真正的main函數(shù)?
8)注意:dyld會(huì)緩存上一次把信息加載內(nèi)存的緩存,所以第二次比第一次啟動(dòng)快一點(diǎn)
category的加載時(shí)機(jī):
category是在本類的實(shí)例方法之后加載的