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

APP的啟動可以分為2種
  1. 冷啟動(Cold Launch):從零開始啟動APP;
  2. 熱啟動(Warm Launch):APP已經(jīng)在內(nèi)存中,在后臺存活著,再次點(diǎn)擊圖標(biāo)啟動APP。

APP啟動時間的優(yōu)化,主要是針對冷啟動進(jìn)行優(yōu)化
  • 通過添加環(huán)境變量可以打印出APP的啟動時間分析(Edit scheme -> Run -> Arguments)
    DYLD_PRINT_STATISTICS設(shè)置為1;
  • 如果需要更詳細(xì)的信息,那就將DYLD_PRINT_STATISTICS_DETAILS設(shè)置為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. 當(dāng)dyld把可執(zhí)行文件、動態(tài)庫都裝載完畢后,會通知Runtime進(jìn)行下一步的處理。

2. runtime 階段:
  1. 調(diào)用map_images進(jìn)行可執(zhí)行文件內(nèi)容的解析和處理:
 _dyld_objc_notify_register(&map_images, load_images, unmap_image);
  1. load_images中調(diào)用call_load_methods,調(diào)用所有Class和Category的+load方法;
  // Call +load methods (without runtimeLock - re-entrant)
  call_load_methods();
  1. 進(jìn)行各種objc結(jié)構(gòu)的初始化(注冊O(shè)bjc類 、初始化類對象等等)
  2. 調(diào)用C++靜態(tài)初始化器和__attribute__((constructor))修飾的函數(shù)
  • 到此為止,可執(zhí)行文件和動態(tài)庫中所有的符號(Class,Protocol,Selector,IMP,…)都已經(jīng)按格式成功加載到內(nèi)存中,被runtime 所管理。

3. main函數(shù)啟動階段
  1. 所有初始化工作結(jié)束后,dyld就會調(diào)用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)構(gòu)造器、ObjC的+load
+ (void)initialize {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
    });
}

3. main

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

iOS性能優(yōu)化:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • HabitsSinging? Dancing? Playing poker? Sleeping? Which on...
    Jenna_King閱讀 516評論 0 0
  • 只要察覺你情緒中 有一絲不耐煩 我就不敢在繼續(xù)說下去
    情愫mst閱讀 330評論 0 0
  • 我真不明白,一所三流的學(xué)校,為什么會要求像北大清華那樣的論文,要不是因?yàn)樯岵坏媚强蓱z的學(xué)費(fèi),住宿費(fèi),水電費(fèi),青春廢...
    JAL陸閱讀 283評論 0 0

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