標籤:
程式啟動的完整過程:
(1)main函數
(2)UIApplicationMain
* 建立UIApplication對象
* 建立UIApplication的delegate對象
(3)delegate對象開始處理(監聽)系統事件(沒有storyboard)
* 程式啟動完畢的時候, 就會調用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中建立UIWindow
* 建立和設定UIWindow的rootViewController
* 顯示視窗
(3)根據Info.plist獲得最主要storyboard的檔案名稱,載入最主要的storyboard(有storyboard)
* 建立UIWindow
* 建立和設定UIWindow的rootViewController
* 顯示視窗
(4)UIApplicationMain
main函數中執行了一個UIApplicationMain這個函數:
int UIApplicationMain(int argc, char *argv[], NSString
*principalClassName, NSString *delegateClassName);
各參數含義:
argc、argv:直接傳遞給UIApplicationMain進行相關處理即可。
principalClassName:指定應用程式類名(app的象徵),該類必須是UIApplication(或子類)。如果為nil,則用UIApplication類作為預設值。
delegateClassName:指定應用程式的代理類,該類必須遵守UIApplicationDelegate協議。
UIApplicationMain函數會根據principalClassName建立UIApplication對象,根據delegateClassName建立一個delegate對象,並將該delegate對象賦值給UIApplication對象中的delegate屬性。
接著會建立應用程式的Main Runloop(事件迴圈),進行事件的處理(首先會在程式完畢後調用delegate對象的application:didFinishLaunchingWithOptions:方法)。
程式正常退出時UIApplicationMain函數才返回。
iOS開發之iOS程式的啟動過程