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
3.根據Info.plist獲得最主要storyboard的文件名,加載最主要的storyboard(有storyboard)
(二)沒有storyboard情況下:
1.main函數
2.UIApplicationMain
3.delegate對象開始處理(監聽)系統事件(沒有storyboard)
