App啟動過程
?? ? 解析Info.plist
?? ? 加載相關信息,例如如閃屏
?? ? 沙箱建立、權限檢查
?? ? Mach-O加載
?? ? 如果是二進制文件,尋找合適當前CPU類別的部分
?? ? 加載所有依賴的Mach-O文件(遞歸調用Mach-O加載的方法)
?? ? 定位內部、外部指針引用,例如字符串、函數等
?? ? 執行聲明為__attribute__((constructor))的C函數
?? ? 加載類擴展(Category)中的方法
?? ? C++靜態對象加載、調用ObjC的 +load 函數
?? ? 程序執行
·? ? 1.main函數
·? ? 2.執行UIApplicationMain函數
·? ? 1.創建UIApplication對象
·? ? 2.創建UIApplicationDelegate對象并復制
·? ? 3.讀取配置文件info.plist,設置程序啟動的一些屬性
·? ? 4.創建應用程序的Main Runloop循環
·? ? 3.UIApplicationDelegate對象開始處理監聽到的事件
·? ? 1.程序啟動成功之后,首先調用application:didFinishLaunchingWithOptions:方法,
·? ? 如果info.plist文件中配置了啟動storyboard文件名,則加載storyboard文件。
·? ? 如果沒有配置,則根據代碼來創建UIWindow--->UIWindow的rootViewController-->顯示