首先應該明确的是iOS程式的幾種運作狀态:
Not running 未運作 程式沒啟動
Inactive 未激活 程式在前台運作,不過沒有接收到事件。在沒有事件處理情況下程式通常停留在這個狀态
Active 激活 程式在前台運作而且接收到了事件。這也是前台的一個正常的模式
Backgroud 背景 程式在背景而且能執行代碼,大多數程式進入這個狀态後會在在這個狀态上停留一會。時間到之後會進入挂起狀态(Suspended)。有的程式經過特殊的請求後可以長期處于Backgroud狀态
Suspended 挂起 程式在背景不能執行代碼。系統會自動把程式變成這個狀态而且不會發出通知。當挂起時,程式還是停留在記憶體中的,當系統記憶體低時,系統就把挂起的程式清除掉,為前台程式提供更多的記憶體。
激活自然不用說,未激活是個什麼東西?舉例來說,按下home鍵,鎖屏,拉下狀态欄,進入控制中心等等都會進入未激活狀态.這涉及到響應中斷的問題,這裡不做過多闡述
程式之間狀态的切換如下圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1TP3F2cGdEZ6ZVbiZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DOyMjM1MDM5AzNyIDM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
同時,對于不同的狀态改變,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