程序啟動原理
一.首先找到程序入口,執行main函數
main -> UIApplicationMain
intmain(intargc,char* argv[]) {@autoreleasepool{// 第三個參數:UIApplication類名或者子類的名稱 nil == @"UIApplication"http:// 第四個參數:UIApplication的代理的代理名稱// NSStringFromClass:把類名轉化字符串// NSStringFromClass好處:1.有提示功能 2.避免輸入錯誤returnUIApplicationMain(argc, argv,nil,NSStringFromClass([AppDelegate class]));? ? }}
二.UIApplicationMain底層做事情
1.創建UIApplication對象
2.創建UIApplication的代理對象,而且給UIApplication對象代理屬性賦值
3.開啟主運行循環,作用接收事件,讓程序一直運行
4.加載info.plist,判斷下有木有指定main.storyboard,如果指定就會去加載
UIApplicationMain函數會根據principalClassName創建UIApplication對象,根據delegateClassName創建一個delegate對象,并將該delegate對象賦值給UIApplication對象中的delegate屬性
UIApplicationMain 接著會建立應用程序的Main Runloop(事件循環),進行事件的處理(首先會在程序完畢后調用delegate對象的application:didFinishLaunchingWithOptions:方法) 程序正常退出時UIApplicationMain函數才返回
圖解
