iOS啟動(dòng)時(shí)間優(yōu)化

一丙者、APP啟動(dòng)時(shí)間應(yīng)從哪些方面優(yōu)化花墩?

APP啟動(dòng)可以概括為3大階段:??dyld?runtime??main

dyld(dynamic link editor)?

Apple的動(dòng)態(tài)連接器悬秉,可以裝載Mach-O(可執(zhí)行文件、動(dòng)態(tài)庫(kù)等)

裝載app的可執(zhí)行文件冰蘑,同時(shí)遞歸加載所有依賴(lài)的動(dòng)態(tài)庫(kù)

當(dāng)dyld把可執(zhí)行文件和泌、動(dòng)態(tài)庫(kù)都裝載完成后,會(huì)通知runtime進(jìn)行下一步處理

2. runtime所做的事情

調(diào)用map_images函數(shù)中調(diào)用call_load_methods祠肥,調(diào)用所有Class和Category的+load方法

進(jìn)行各種objc結(jié)構(gòu)的初始化(注冊(cè)objc類(lèi)武氓、初始化類(lèi)對(duì)象等等)

調(diào)用C++靜態(tài)初始化器和__attribure__((constructor))修飾的函數(shù)(JSONKit中存在具體應(yīng)用)

到此為止,可執(zhí)行文件和動(dòng)態(tài)庫(kù)中所有的符號(hào)(Class, Protocol, Selector, IMP…)都已按格式成功加載到內(nèi)存中仇箱,被runtime所管理

3. 總結(jié)

app的啟動(dòng)由dylb主導(dǎo)聋丝,將可執(zhí)行文件加載到內(nèi)存,順便加載所有依賴(lài)的動(dòng)態(tài)庫(kù)

并由runtime負(fù)責(zé)加載成objc定義的結(jié)構(gòu)

所有初始化工作結(jié)束后工碾,dyld就會(huì)調(diào)用main函數(shù)

接下來(lái)就是ApplicationMain函數(shù)弱睦,AppDelegate的application:didFinishLaunchingWithOptions:方法

4. 按照不同的階段優(yōu)化?

dyld

減少動(dòng)態(tài)庫(kù)、合并一些動(dòng)態(tài)庫(kù)(定期清理不必要的動(dòng)態(tài)庫(kù))

減少objc類(lèi)渊额、分類(lèi)的數(shù)量况木、減少selector數(shù)量(定期清理不必要的類(lèi)、分類(lèi))

減少C++虛構(gòu)函數(shù)

Swift盡量使用struct

runtime

使用+initialize方法和dispatch_once取代所有的__attribute__((constructor))旬迹、C++靜態(tài)構(gòu)造器火惊、Objc的+load方法

main

在不影響用戶(hù)體驗(yàn)的前提下,盡可能將一些操作延遲奔垦,不要全部都放在finishLaunching方法中

按需加載

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屹耐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子椿猎,更是在濱河造成了極大的恐慌惶岭,老刑警劉巖寿弱,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異按灶,居然都是意外死亡症革,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)鸯旁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)噪矛,“玉大人,你說(shuō)我怎么就攤上這事铺罢⊥Оぃ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵韭赘,是天一觀的道長(zhǎng)雷袋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)辞居,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任蛋勺,我火速辦了婚禮瓦灶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抱完。我一直安慰自己贼陶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布巧娱。 她就那樣靜靜地躺著碉怔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪禁添。 梳的紋絲不亂的頭發(fā)上撮胧,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音老翘,去河邊找鬼芹啥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛铺峭,可吹牛的內(nèi)容都是我干的墓怀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼卫键,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼傀履!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起莉炉,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤钓账,失蹤者是張志新(化名)和其女友劉穎碴犬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體官扣,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翅敌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惕蹄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚯涮。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卖陵,靈堂內(nèi)的尸體忽然破棺而出遭顶,到底是詐尸還是另有隱情,我是刑警寧澤泪蔫,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布棒旗,位于F島的核電站,受9級(jí)特大地震影響撩荣,放射性物質(zhì)發(fā)生泄漏铣揉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一餐曹、第九天 我趴在偏房一處隱蔽的房頂上張望逛拱。 院中可真熱鬧,春花似錦台猴、人聲如沸朽合。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)曹步。三九已至,卻和暖如春休讳,著一層夾襖步出監(jiān)牢的瞬間讲婚,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工俊柔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留磺樱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓婆咸,卻偏偏與公主長(zhǎng)得像竹捉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尚骄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容