App啟動原理和啟動過程


 
 
一、程序啟動原理
1.1、main函數中執行了一個UIApplicationMain這個函數UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

1.2、argc、argv:直接傳遞給UIApplicationMain進行相關處理即可 

     principalClassName:指定應用程序類名(app的象征),該類必須是UIApplication(或子類)。如果為nil,則用UIApplication類作為默認值

     delegateClassName:指定應用程序的代理類,該類必須遵守UIApplicationDelegate協議

1.3、UIApplicationMain函數會根據principalClassName創建UIApplication對象,根據delegateClassName創建一個delegate對象,並將該delegate對象賦值給UIApplication對象中的delegate屬性

1.4、接着會建立應用程序的Main Runloop(事件循環),進行事件的處理(首先會在程序完畢后調用delegate對application:didFinishLaunchingWithOptions:方法)

1.5、程序正常退出時UIApplicationMain函數才返回

#import <UIKit/UIKit.h>
#import"AppDelegate.h"int main(int argc, char * argv[])
{
    @autoreleasepool {
        // return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        // return UIApplicationMain(argc, argv, @"UIApplication", NSStringFromClass([AppDelegate class]));/*
         argc: 系統或者用戶傳入的參數個數
         argv: 系統或者用戶傳入的實際參數
         1.根據傳入的第三個參數創建UIApplication對象
         2.根據傳入的第四個產生創建UIApplication對象的代理
         3.設置剛剛創建出來的代理對象為UIApplication的代理
         4.開啟一個事件循環
         */return UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");
    }
} 
 
二、程序啟動的完整過程

 

從main文件開始說起程序啟動分為兩類:1.有storyboard 2.沒有storyboard

(一)有storyboard情況下:
1.main函數

2.UIApplicationMain

    - 創建UIApplication對象
    - 創建UIApplication的delegate對象

3.根據Info.plist獲得最主要storyboard的文件名,加載最主要的storyboard(有storyboard)

    - 創建UIWindow
    - 創建和設置UIWindow的rootViewController
    - 顯示窗口

(二)沒有storyboard情況下:
1.main函數

2.UIApplicationMain

    - 創建UIApplication對象
    - 創建UIApplication的delegate對象

3.delegate對象開始處理(監聽)系統事件(沒有storyboard)

    - 程序啟動完畢的時候, 就會調用代理的application:didFinishLaunchingWithOptions:方法
    - 在application:didFinishLaunchingWithOptions:中創建UIWindow
    - 創建和設置UIWindow的rootViewController
    - 顯示窗口

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM