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

PY爲個人前綴名ios

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

  • 每監聽到對應的系統事件時,就會通知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:) 程序正常退出時這個函數才返回。若是進程要被系統強制殺死,通常這個函數還沒來得及返回進程就終止了函數

下面咱們有圖有真相吧!!! 簡單的圖,但願你能幫到你oop

相關文章
相關標籤/搜索