iOS應用程序的完整啓動過程及其工作原理

1.先執行main函數,main內部會調用UIApplicationMain函數 
2.UIApplicationMain函數裏面做了什麼事情: 
1> 創建UIApplication對象 
2> 創建UIApplication的delegate對象—–PYAppDelegate 
3> 開啓一個消息循環

每監聽到對應的系統事件時,就會通知MJAppDelegate 
4> 爲應用程序創建一個UIWindow對象(繼承自UIView),設置爲PYAppDelegate的window屬性 
5> 加載Info.plist文件,讀取最主要storyboard文件的名稱 
6> 加載最主要的storyboard文件,創建白色箭頭所指的控制器對象 
7> 並且設置第6步創建的控制器爲UIWindow的rootViewController屬性(根控制器) 
8> 展示UIWindow,展示之前會將添加rootViewController的view到UIWindow上面(在這一步纔會創建控制器的view) 
[window addSubview: window.rootViewControler.view];
進入main函數,在main.m的main函數中執行了UIApplicationMain這個方法,這是ios程序的入口點! 
int UIApplicationMain(int argc, char argv[], NSString principalClassName, NSString *delegateClassName) 
argc、argv:ISO C標準main函數的參數,直接傳遞給UIApplicationMain進行相關處理即可 
principalClassName:指定應用程序類,該類必須是UIApplication(或子類)。如果爲nil,則用UIApplication類作爲默認值 
delegateClassName:指定應用程序類的代理類,該類必須遵守UIApplicationDelegate協議 
此函數會根據principalClassName創建UIApplication對象,根據delegateClassName創建一個delegate對象,並將該delegate對象賦值給UIApplication對象中的delegate屬性 
lUIApplication對象會依次給delegate對象發送不同的消息,接着會建立應用程序的main runloop(事件循環),進行事件的處理(首先會調用delegate對象的 application:didFinishLaunchingWithOptions:) 
程序正常退出時這個函數才返回。如果進程要被系統強制殺死,一般這個函數還沒來得及返回進程就終止了
<img src="https://img-blog.csdn.net/20141019144918343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpY2hlbmdqaWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章