簡(jiǎn)單說(shuō)就是加載mach-o文件的分類信息和類信息,然后在某些時(shí)機(jī)把分類信息copy,類信息的rw上,所有才出現(xiàn)了oc上分類方法覆蓋類方法的現(xiàn)象
通過(guò)查看源碼分類信息copy到類的rw上有三處地方,1realizeClass,2loadCategory,3prepareLoad(之后在調(diào)用realizeClass)
主類是否lazy,分類是否lazy (0-0)(實(shí)現(xiàn)了load函數(shù)就是非lazy類)
對(duì)于(1-1),在第一次給類發(fā)送消息的時(shí)候調(diào)用relalize在進(jìn)行attach操作
對(duì)于(0-1),在調(diào)用map_images->readImage時(shí)對(duì)主類進(jìn)行realize操作,由于還沒(méi)有加載分類信息,先不進(jìn)行attach操作在調(diào)用load_images->loadAllCategory 讀取mach-0的分類信息檢查改類是否進(jìn)行realize,如果進(jìn)行realize,則進(jìn)行attach操作,沒(méi)進(jìn)行的把先關(guān)信息保存到一個(gè)map里面
對(duì)于(1-0),在loadAllCategory存儲(chǔ)了分類信息,在prepare_load_methods里面會(huì)加載unlazy的方法,這個(gè)時(shí)候回對(duì)響應(yīng)類進(jìn)行realize操作,并對(duì)分類進(jìn)行attach操作
對(duì)于(0-0),在read_images對(duì)主類進(jìn)行realize,在loadallcategory中對(duì)分類進(jìn)行attach操作
map_images 參數(shù)是數(shù)據(jù),一次性回調(diào)所有mach-o
load_images: 挨個(gè)回調(diào),其中l(wèi)oadAllCategory一次性加載所有分類信息