iOS程序的完整啟動過程及原理

1.先執(zhí)行main函數(shù),main內部會調用UIApplicationMain函數(shù)
2.UIApplicationMain函數(shù)里面做了什么事情?
1> 創(chuàng)建UIApplication對象
2> 創(chuàng)建UIApplication的delegate對象-----AppDelegate
3> 開啟一個消息循環(huán).每監(jiān)聽到對應的系統(tǒng)事件時,就會通知MJAppDelegate
4> 為應用程序創(chuàng)建一個UIWindow對象(繼承自UIView),設置為AppDelegate的window屬性
5> 加載Info.plist文件,讀取最主要storyboard文件的名稱
6> 加載最主要的storyboard文件,創(chuàng)建白色箭頭所指的控制器對象
7> 并且設置第6步創(chuàng)建的控制器為UIWindow的rootViewController屬性(根控制器)
8> 展示UIWindow,展示之前會將添加rootViewController的view到UIWindow上面(在這一步才會創(chuàng)建控制器的view) [window addSubview: window.rootViewControler.view];
進入main函數(shù),在main.m的main函數(shù)中執(zhí)行了UIApplicationMain這個方法,這是ios程序的入口點!
int UIApplicationMain(int argc, char argv[], NSString principalClassName, NSString *delegateClassName) argc、argv:ISO C標準main函數(shù)的參數(shù),直接傳遞給UIApplicationMain進行相關處理即可 .principalClassName:指定應用程序類,該類必須是UIApplication(或子類)。如果為nil,則用UIApplication類作為默認值 delegateClassName:指定應用程序類的代理類.
該類必須遵守UIApplicationDelegate協(xié)議 此函數(shù)會根據(jù)principalClassName創(chuàng)建UIApplication對象,根據(jù)delegateClassName創(chuàng)建一個delegate對象,并將該delegate對象賦值給UIApplication對象中的delegate屬性 lUIApplication對象會依次給delegate對象發(fā)送不同的消息,接著會建立應用程序的main runloop(事件循環(huán)),進行事件的處理(首先會調用delegate對象的 application:didFinishLaunchingWithOptions:) 程序正常退出時這個函數(shù)才返回。如果進程要被系統(tǒng)強制殺死,一般這個函數(shù)還沒來得及返回進程就終止了

下面看圖

212958_tXkB_1408973.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容