1.使用者點選應用程式圖示;
2.程式執行main()函數;
3.main函數中直接傳回的是UIApplicationMain,是以接下來執行UIApplicationMain;
4.根據UIApplicationMain中的第三、第四個參數分别設定UIApplication對象及其代理;第三個參數是UIApplication的類名或者子類名,如果為nil則預設是UIApplication,第四個參數代表代理的類名,該代理負責處理應用程式狀态切換過程中所産生的事件;
5.開啟循環監聽系統事件(Event Loop);
6.此處分有storyboard和沒有storyboard兩種情況,
(1)有stroyboard
> 應用程建立一個UIWindow對象(繼承自UIView),并設定為AppDelegate的window屬性。
> 加載Info.plist檔案,讀取最主要storyboard檔案的名稱。
> 加載最主要的storyboard檔案,建立白色箭頭所指的控制器對象。并且設定控制器為UIWindow的rootViewController屬性(根控制器)。
> 展示UIWindow,展示之前會将添加rootViewController的view到UIWindow上面(在這一步才會建立控制器的view),其内部會執行該行代碼:[window addSubview: window.rootViewControler.view];
(2)沒有stroyboard
> 首先會調用delegate對象的application:didFinishLaunchingWithOptions:方法。
> 在application:didFinishLaunchingWithOptions:方法中需要主動建立 UIWindow對象。并設定為AppDelegate的window屬性。
> 主動建立一個 UIViewController對象,并指派給window的rootViewController屬性。
> 調用 window的makeKeyAndVisible方法顯示視窗。
//建立視窗對象
self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
//建立主要制器對象(控制器的View是延時加載的,等到用到的時候再用loadView方法加載)
self.HITViewController = [[UIViewController alloc]initWithNibName:@"HITViewController" bundle:nil];
//設定視窗的根控制器為該主要制器
self.window.rootViewController = self.HITViewController;
//讓視窗成為主視窗并可見
[self.window makeKeyAndVisible];
程式加載的順序是先在程式中找storyboard,若果沒有找到則找相應的xib,若是都沒找到并且代理中沒有手動添加代碼,則預設用代碼建立一個黑色的界面;