補習:程序啟動原理和UIApplication

改文章轉自 文文頂

三、程序啟動原理
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函數才返回

#import <UIKit/UIKit.h>

#import "YYAppDelegate.h"

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

系統入口的代碼和參數說明:

argc:系統或者用戶傳入的參數
argv:系統或用戶傳入的實際參數
1.根據傳入的第三個參數,創建UIApplication對象
2.根據傳入的第四個產生創建UIApplication對象的代理
3.設置剛剛創建出來的代理對象為UIApplication的代理
4.開啟一個事件循環(可以理解為里面是一個死循環)這個時間循環是一個隊列(先進先出)先添加進去的先處理

ios程序啟動原理


四、程序啟動的完整過程
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
  • 顯示窗口
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容