iOS性能優(yōu)化 - 啟動優(yōu)化

APP的啟動可以分為2種
  1. 冷啟動(Cold Launch):從零開始啟動APP搏恤;
  2. 熱啟動(Warm Launch):APP已經在內存中攘烛,在后臺存活著舔痕,再次點擊圖標啟動APP评抚。

APP啟動時間的優(yōu)化,主要是針對冷啟動進行優(yōu)化
  • 通過添加環(huán)境變量可以打印出APP的啟動時間分析(Edit scheme -> Run -> Arguments)
    DYLD_PRINT_STATISTICS設置為1伯复;
  • 如果需要更詳細的信息慨代,那就將DYLD_PRINT_STATISTICS_DETAILS設置為1。

APP的冷啟動可以概括為3大階段
  1. dyld(dynamic link editor):
  • Apple的動態(tài)鏈接器啸如,可以用來裝載Mach-O文件(可執(zhí)行文件侍匙、動態(tài)庫等)
  1. runtime;
  2. main。

1. dyld 階段:
  1. 裝載APP的可執(zhí)行(Mach-o)文件叮雳,同時會遞歸加載所有依賴的動態(tài)庫;
  2. 當dyld把可執(zhí)行文件想暗、動態(tài)庫都裝載完畢后妇汗,會通知Runtime進行下一步的處理。

2. runtime 階段:
  1. 調用map_images進行可執(zhí)行文件內容的解析和處理:
 _dyld_objc_notify_register(&map_images, load_images, unmap_image);
  1. load_images中調用call_load_methods说莫,調用所有Class和Category的+load方法;
  // Call +load methods (without runtimeLock - re-entrant)
  call_load_methods();
  1. 進行各種objc結構的初始化(注冊Objc類 杨箭、初始化類對象等等)
  2. 調用C++靜態(tài)初始化器和__attribute__((constructor))修飾的函數(shù)
  • 到此為止,可執(zhí)行文件和動態(tài)庫中所有的符號(Class储狭,Protocol互婿,Selector,IMP晶密,…)都已經按格式成功加載到內存中擒悬,被runtime 所管理模她。

3. main函數(shù)啟動階段
  1. 所有初始化工作結束后稻艰,dyld就會調用main函數(shù);
  • 接下來就是UIApplicationMain函數(shù)侈净,AppDelegate的application:didFinishLaunchingWithOptions:方法

冷啟動優(yōu)化:

1. dyld階段
  1. 減少動態(tài)庫尊勿、合并一些動態(tài)庫(定期清理不必要的動態(tài)庫);
  2. 減少Objc類、分類的數(shù)量畜侦、減少Selector數(shù)量(定期清理不必要的類元扔、分類);
  3. 減少C++虛函數(shù)數(shù)量;(虛函數(shù)的存在,會生成一張?zhí)摫恚?/li>
  4. Swift盡量使用struct旋膳。

2. runtime階段
  1. 用+initialize方法和dispatch_once取代所有的__attribute__((constructor))澎语、C++靜態(tài)構造器、ObjC的+load验懊。
+ (void)initialize {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
    });
}

3. main

  1. 在不影響用戶體驗的前提下擅羞,盡可能將一些操作延遲,不要全部都放在finishLaunching方法中;
  2. 按需加載义图。

iOS性能優(yōu)化:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末娃承,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子怕篷,更是在濱河造成了極大的恐慌历筝,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廊谓,死亡現(xiàn)場離奇詭異梳猪,居然都是意外死亡,警方通過查閱死者的電腦和手機蹂析,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門舔示,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碟婆,“玉大人,你說我怎么就攤上這事惕稻∈玻” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵俺祠,是天一觀的道長公给。 經常有香客問我,道長蜘渣,這世上最難降的妖魔是什么淌铐? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蔫缸,結果婚禮上腿准,老公的妹妹穿的比我還像新娘。我一直安慰自己拾碌,他們只是感情好吐葱,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著校翔,像睡著了一般弟跑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上防症,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天孟辑,我揣著相機與錄音,去河邊找鬼蔫敲。 笑死饲嗽,一個胖子當著我的面吹牛,可吹牛的內容都是我干的燕偶。 我是一名探鬼主播喝噪,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼指么!你這毒婦竟也來了酝惧?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤伯诬,失蹤者是張志新(化名)和其女友劉穎晚唇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盗似,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡哩陕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悍及。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡闽瓢,死狀恐怖,靈堂內的尸體忽然破棺而出心赶,到底是詐尸還是另有隱情扣讼,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布缨叫,位于F島的核電站椭符,受9級特大地震影響,放射性物質發(fā)生泄漏耻姥。R本人自食惡果不足惜销钝,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琐簇。 院中可真熱鬧蒸健,春花似錦、人聲如沸鸽嫂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽据某。三九已至,卻和暖如春诗箍,著一層夾襖步出監(jiān)牢的瞬間癣籽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工滤祖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匠童。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓埂材,卻偏偏與公主長得像,于是被迫代替她去往敵國和親汤求。 傳聞我的和親對象是個殘疾皇子俏险,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容

  • HabitsSinging? Dancing? Playing poker? Sleeping? Which on...
    Jenna_King閱讀 452評論 0 0
  • 只要察覺你情緒中 有一絲不耐煩 我就不敢在繼續(xù)說下去
    情愫mst閱讀 222評論 0 0
  • 我真不明白竖独,一所三流的學校,為什么會要求像北大清華那樣的論文挤牛,要不是因為舍不得那可憐的學費莹痢,住宿費,水電費,青春廢...
    JAL陸閱讀 277評論 0 0