一、第一步先要看一張圖,這張圖就是IOS程式的啟動過程

UIApplicationMain
•main函數中執行了一個 UIApplicationMain這個函數 • int UIApplicationMain( int argc, char *argv[], NSString*principalClassName, NSString *delegateClassName); 1、argc、argv:直接傳遞給 UIApplicationMain進行相關處理即可 2、principalClassName:指定應用程式類名(app的象征),該類必須是 UIApplication(或子類)。如果為nil,則用 UIApplication類作為預設值 3、delegateClassName:指定應用程式的代理類,該類必須遵守 UIApplicationDelegate協定
• UIApplicationMain函數會根據principalClassName建立UIApplication對象,根據delegateClassName建立一個delegate對象,并将該delegate對象指派給UIApplication對象中的delegate屬性 • 接着會建立應用程式的Main Runloop(事件循環),進行事件的處理(首先會在程式完畢後調用delegate對象的application:didFinishLaunchingWithOptions:方法) • 程式正常退出時UIApplicationMain函數才傳回 UIApplication
- UIApplication對象是應用程式的象征
- 每一個應用都有自己的UIApplication對象,而且是單例的
- 通過[UIApplication sharedApplication]可以獲得這個單例對象
- 一個iOS程式啟動後建立的第一個對象就是UIApplication對象
- 利用UIApplication對象,能進行一些應用級别的操作
下面介紹以下什麼UIApplication和delegate
1、所有的移動作業系統都有個緻命的缺點:app很容易受到打擾。比如一個來電或者鎖屏會導緻app進入背景甚至被終止 2、還有很多其它類似的情況會導緻app受到幹擾,在app受到幹擾時,會産生一些系統事件,這時UIApplication會通知它的delegate對象,讓delegate代理來處理這些系統事件
•delegate可處理的事件包括 : Ø 應用程式 的生命周期事件 ( 如程式啟動和關閉 ) Ø 系統 事件 ( 如來電 ) Ø 記憶體警告 Ø … …
可以使用一張圖來介紹他們之間的關系
UIApplicationDelegate
l、每次建立完項目,都有個帶有“AppDelegate”字眼的類,它就是UIApplication的代理
2、lMJAppDelegate預設已經遵守了 UIApplicationDelegate協定,已經是 UIApplication的代理
下面說一個重要的内容-UIWindow •UIWindow是一種特殊的UIView,通常在一個app中隻會有一個UIWindow •iOS程式啟動完畢後,建立的第一個視圖控件就是UIWindow,接着建立控制器的view,最後将控制器的view添加到UIWindow上,于是控制器的view就顯示在螢幕上了 •一個iOS程式之是以能顯示到螢幕上,完全是因為它有UIWindow •也就說,沒有UIWindow,就看不見任何UI界面
•添加UIView到UIWindow中兩種常見方式: - (void)addSubview:(UIView *)view;
直接将view添加到UIWindow中,但并不會理會view對應的UIViewController
@property(nonatomic,retain) UIViewController *rootViewController;
自動将rootViewController的view添加到UIWindow中,負責管理rootViewController的生命周期
•常用方法 - (void)makeKeyWindow;
讓目前UIWindow變成keyWindow(主視窗)
- (void)makeKeyAndVisible;
讓目前UIWindow變成keyWindow,并顯示出來
最後上一張圖,總結他們之間的關系
這就是IOS程式的啟動關系,首先是UIapplication裡面有一個delegate代理,這個代理就是建立IOS程式預設出現的那個代理,這個代理裡面有一個Window方法,UIwindow有一個屬性,是rootViewController,通過rootViewController設定根控制器,就在UIwindow上加了一個控制器,就顯示這個控制器的UIView,這個UIView可以通過三個方法實作,分别是
1、通過XIB方法加載 2、通過storyboard實作 3、自己寫代碼實作
這個流程就如我上面所說,有什麼不了解的可以回複我!