天天看點

iOS應用程式生命周期問題

首先應該明确的是iOS程式的幾種運作狀态:

Not running  未運作  程式沒啟動

Inactive          未激活        程式在前台運作,不過沒有接收到事件。在沒有事件處理情況下程式通常停留在這個狀态

Active             激活           程式在前台運作而且接收到了事件。這也是前台的一個正常的模式

Backgroud     背景           程式在背景而且能執行代碼,大多數程式進入這個狀态後會在在這個狀态上停留一會。時間到之後會進入挂起狀态(Suspended)。有的程式經過特殊的請求後可以長期處于Backgroud狀态

Suspended    挂起           程式在背景不能執行代碼。系統會自動把程式變成這個狀态而且不會發出通知。當挂起時,程式還是停留在記憶體中的,當系統記憶體低時,系統就把挂起的程式清除掉,為前台程式提供更多的記憶體。

激活自然不用說,未激活是個什麼東西?舉例來說,按下home鍵,鎖屏,拉下狀态欄,進入控制中心等等都會進入未激活狀态.這涉及到響應中斷的問題,這裡不做過多闡述

程式之間狀态的切換如下圖:

iOS應用程式生命周期問題

同時,對于不同的狀态改變,iOS系統提供了相關的回調函數:

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

- (void)applicationWillResignActive:(UIApplication *)application

- (void)applicationDidBecomeActive:(UIApplication *)application 

- (void)applicationDidEnterBackground:(UIApplication *)application

- (void)applicationWillEnterForeground:(UIApplication *)application

- (void)applicationWillTerminate:(UIApplication *)application

- (void)applicationDidFinishLaunching:(UIApplication*)application

對于面試中問到的關于聲明周期的問題,能夠将上述内容表達清楚便可以了.

涉及到包括應用程式啟動/關閉流程,main函數的作用,程式中斷和背景運作的問題可參照下列文章:

官方文檔:https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW20

相關博文:http://blog.csdn.net/totogo2010/article/details/8048652