load 耗時(shí)工具類原理解析

如果要對(duì)load函數(shù)進(jìn)行hook,需要做到下面兩點(diǎn):
1,在系統(tǒng)調(diào)用load方法之前對(duì)load進(jìn)行hook
2,對(duì)load進(jìn)行hook

研究:
1,經(jīng)過runtime源碼分析,在程序啟動(dòng)的時(shí)候先調(diào)用mapImages(加載所有mach-0文件),for循環(huán)調(diào)用所有mach-o文件的loadImage函數(shù)(該函數(shù)第一次調(diào)用會(huì)加載所有mach-o分類信息,并調(diào)用改mach-o文件的load函數(shù)),
2,根據(jù)Cocopods的源碼,動(dòng)態(tài)庫的優(yōu)先級(jí)比靜態(tài)庫高,庫名字的ascall碼小的先加載,
實(shí)現(xiàn)方案:
編寫一個(gè)動(dòng)態(tài)庫字庫,庫的名字首字母要保證是所有動(dòng)態(tài)庫最小的,
在該庫中通過attribute(constructor)函數(shù)(該函數(shù)會(huì)在該庫的load函數(shù)后調(diào)用),在這個(gè)時(shí)候已經(jīng)加載了所有的分類信息,并且還沒有調(diào)用業(yè)務(wù)中的其他load函數(shù),這個(gè)時(shí)候可以拿到所有unlazy類,然后進(jìn)行hook攔截

load方法過多到時(shí)啟動(dòng)慢的原因是類的release這個(gè)操作很耗時(shí)
參考:
https://triplecc.github.io/2019/05/27/%E8%AE%A1%E7%AE%97load%E8%80%97%E6%97%B6/

?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 本文會(huì)介紹一個(gè)自己寫的工具,能夠把第三方iOS應(yīng)用轉(zhuǎn)成動(dòng)態(tài)庫,并加載到自己的App中,文章最后會(huì)以支付寶為例...
    hhy_082510閱讀 1,376評(píng)論 1 1
  • 可否使用 == 來判斷兩個(gè)NSString類型的字符串是否相同?為什么? 不能。==判斷的是兩個(gè)變量的值的內(nèi)存地址...
    漸z閱讀 669評(píng)論 0 0
  • 前言 在 iOS 開發(fā)中,使用的編程語言主要是 Objective-C。這一種編程語言雖然是 C/C++ 的擴(kuò)展,...
    Anyeler閱讀 2,181評(píng)論 0 11
  • 前言 啟動(dòng)優(yōu)化一役后,超預(yù)期將所負(fù)責(zé)的 App 雙端啟動(dòng)的耗時(shí)都降低了65%以上,iOS 在iPhone7上速度達(dá)...
    編程怪才_(tái)凌雨畫閱讀 488評(píng)論 0 2
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn),也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 7,560評(píng)論 0 4

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