iOS應用程序生命週期&啓動週期函數

—程序的生命週期
        a.程序的生命週期是指應用程序啓動到應用程序結束整個階段的全過程
        b.每一個IOS應用程序都包含一個UIApplication對象,IOS系統通過該UIApplication對象監控應用程序生命週期全過程
        c.每一個IOS應用程序都要爲其UIApplication對象指定一個代理對象,並由該代理對象處理UIApplication對象監測到的應用程序生命週期事件。

—IOS應用程序5種狀態
        1.Not running:應用還沒有啓動,或者應用正在運行但是途中被系統停止
        2.Inactive:當前應用正在前臺運行,但是並不接收事件(當前或許正在執行其它代碼)。一般每當應用要從一個狀態切換到另一個不同的狀態時,中途過渡會短暫停留在此態。唯一在此狀態停留時間比較長的情況是:當用戶鎖屏時,或者系統提示用戶去響應某些(諸如電話來電、有未讀短信等)事件的時候。
        3.Active:當前應用正在前臺運行,並且接收事件。這是應用正在前臺運行時所處的正常狀態。
        4.Background:應用處在後臺,並且還在執行代碼。大多數將 要進入Suspended狀態的應用,會先短暫進入此狀態。然而,對於請求需要額外的執行時間的應用,會在此狀態保持更長一段時間。另外,如果一個應用要求啓動時直接進入後臺運行,這樣的應用會直接從Notrunning狀態進入Background狀態,中途不會經過Inactive狀態。比如沒有界面的應用。注此處並不特指沒有界面的應用,其實也可以是有界面的應用,只是如果要直接進入background狀態的話,該應用界面不會被顯示。
        5.Suspended:應用處在後臺,並且已停止執行代碼。系統自動的將應用移入此狀態,且在此舉之前不會對應用做任何通知。當處在此狀態時,應用依然駐留內存但不執行任何程序代碼。當系統發生低內存告警時,系統將會將處 於Suspended狀態的應用清除出內存以爲正在前臺運行的應用提供足夠的內存。





—創建UIApplication對象並指定其代理

[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. int main(int argc, charchar * argv[])  
  2. {  
  3.     @autoreleasepool {  
  4.         return UIApplicationMain(argc, argv, nil, NSStringFromClass([CNAppDelegate class]));  
  5.     }  
  6. }  

 通過UIApplicationMain函數創建UIApplication對象並指定其代理對象AppDelegate;第三個參數爲指定UIApplication的子類來生成UIApplication對象,爲nil時由UIApplication類初始化默認對象;第四個參數爲指定代理對象。


—UIApplication的代理對象
        a.作爲UIApplication的代理類,必須要先實現UIApplicationDelegate協議,協議裏明確了作爲代理應該做或可以做哪些事情。
        b.UIApplication對象負責監聽應用程序的生命週期事件,並將生命週期事件交由UIApplication代理對象處理。


—UIApplication代理對象生命週期函數詳解
        -(void)applicationWillResignActive:(UIApplication *)application
        說明:當應用程序將要入非活動狀態執行,在此期間,應用程序不接收消息或事件,比如來電話了
        -(void)applicationDidBecomeActive:(UIApplication *)application
        說明:當應用程序入活動狀態執行,這個剛好跟上面那個方法相反
        -(void)applicationDidEnterBackground:(UIApplication *)application
        說明:當程序被推送到後臺的時候調用。所以要設置後臺繼續運行,則在這個函數裏面設置即可
        -(void)applicationWillEnterForeground:(UIApplication *)application
        說明:當程序從後臺將要重新回到前臺時候調用,這個剛好跟上面的那個方法相反。
        -(void)applicationWillTerminate:(UIApplication *)application
        說明:當程序將要退出是被調用,通常是用來保存數據和一些退出前的清理工作。這個需要要設置UIApplicationExitsOnSuspend的鍵值爲YES,ios5設置Application does not run in background的鍵值爲YES。
        -(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
        說明:ios設備只有有限的內存,如果爲應用程序分配了太多內存操作系統會終止應用程序的運行,在終止前會執行這個方法,通常可以在這裏進行內存清理工作防止程序被終止
        -(void)applicationDidFinishLaunching:(UIApplication*)application
        說明:當程序載入後執行。
        -(BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
        說明:當打開URL時執行。


UIViewController生命週期

UIViewController
        UIViewController是IOS頂層視圖的載體及控制器,用戶與程序界面的交互都是由UIViewController來控制的。
        UIViewController管理UIView的生命週期及資源的加載與釋放。
—UIView
        UIView與UIWindow共同展示了應用用戶界面。

—UIViewController生命週期事件
        -(void)loadView
        加載視圖資源並初始化視圖。當你從Nib文件加載時,一般情況下這裏不需要做任何處理。只有在你沒有使用Nib加載視圖時進行重寫。
這裏不需要調用[super loadView];
        -(void)viewDidLoad
視圖載入完成,可以進行自定義數據加載和動態視圖的創建
        -(void)viewDidUnload
        釋放視圖資源
        -(void)viewWillAppear:(BOOL)animated
        將要加載出視圖
        -(void)viewDidAppear:(BOOL)animated
        視圖出現
        -(void)viewWillDisappear:(BOOL)animated
        視圖即將消失
        -(void)viewDidDisappear:(BOOL)animated
        視圖已經消失
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章