iOS程序的啟動(dòng)過(guò)程
UIApplicationMain
main函數(shù)中執(zhí)行了一個(gè)UIApplicationMain這個(gè)函數(shù)
// argc、argv:直接傳遞給UIApplicationMain進(jìn)行相關(guān)處理即可
int UIApplicationMain(int argc, char *argv[],
// principalClassName:指定應(yīng)用程序類名(app的象征);
該類必須是UIApplication(或子類)氮墨。
如果為nil,則用UIApplication類作為默認(rèn)值.
// delegateClassName:指定應(yīng)用程序的代理類
該類必須遵守__UIApplicationDelegate__協(xié)議
NSString *principalClassName, NSString *delegateClassName);
- UIApplicationMain函數(shù)會(huì)根據(jù)
principalClassName
創(chuàng)建UIApplication對(duì)象 - 根據(jù)
delegateClassName
創(chuàng)建一個(gè)delegate對(duì)象 - 并將該delegate對(duì)象賦值給UIApplication對(duì)象中的
delegate
屬性 - 接著會(huì)建立應(yīng)用程序的
Main Runloop(事件循環(huán))
- 然后進(jìn)行事件的處理 :
(首先會(huì)在程序完畢后調(diào)用delegate對(duì)象的application:didFinishLaunchingWithOptions:方法
) - 程序正常退出時(shí)UIApplicationMain函數(shù)才返回
程序啟動(dòng)過(guò)程
-------------UIApplication做的事情----------------
1- 創(chuàng)建UIApplication對(duì)象;
2 - 創(chuàng)建UIApplication代理,并且設(shè)置UIApplication代理;
3 - 開(kāi)啟主運(yùn)行循環(huán),處理事件
4 - 加載info.plist
5 - 如果info.plist里面有指定main.storyboard,就加載main.storyboard
—————在加載main.storyboard時(shí)做的事情——————
1 - 創(chuàng)建UIWindow
2 - 加載main.storyboard,并且加載main.storyboard中指定的控制器
3 - 把新創(chuàng)建的控制器作為窗口的根控制器,讓窗口顯示出來(lái).