天天看點

iOS程式啟動内部過程(從點選圖示到顯示界面)

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,若是都沒找到并且代理中沒有手動添加代碼,則預設用代碼建立一個黑色的界面;