標籤:
做iphone開發有必要知道iphone程式的生命週期,說白點就是當點擊程式表徵圖啟動程式開始到退出程式整個使用運行過程中底下的代碼都發生了什麼,只有理解生命週期,有利於我們開發人員開發出更棒的應用
接下來從系統內建的項目模版-單視圖應用模版來分析iphone應用生命週期,系統建立的這個應用啟動後就一個view,上面什麼都不顯示,大家都懂得
下面貼兩張圖來描述一下應用程式的生命週期
兩張圖片要表達的意思都是差不多,當使用者點擊一個表徵圖的時候,程式開始運行,從main函數開始,
int main(int argc, char *argv[]){ @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); }}
main函數當中
UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])這句話的意思是建立一個UIApplication對象,並設定他的委託類,這裡第三個參數nil表示預設的是建立一個UIApplication對象,也可以寫成UIApplication的子類,緊跟在後面的參數意思是設定UIApplication對象的委託,
在UIApplicationMain內部,實現了類似的代碼
UIApplication *app = [[UIApplication alloc] init];UIApplicationDelegate *delegate = [[UIApplicationDelegate alloc] init];app.delegate = delegate;
UIApplication對象類似於總司令,UIApplication對象的委託就類似於他手下,總司令只需指揮,有事手下幹,
UIApplication對象建立後直到程式結束前,他以單例的形式存在,可以通過[[UIApplication sharedApplication]delegate]來擷取他的代理類,如下面代碼
AppDelegate * delegate = (AppDelegate *)[[UIApplicationsharedApplication]delegate];
UIApplication對象建立好了,其委託也設定好了,下面看看他的委託(手下)都做了些什麼事,進入AppDelegate.m中看
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
這個訊息類似於jQuery的ready事件,告訴你一切準備就緒,你可以開始了.也可以形象的比喻成,好比總統宣誓就任,你可以決定提議國務卿和內閣組成,以及美聯儲主席等要職的安排等.
applicationWillTerminate
這個預示程式就要結束.
映射為當前程式王國的總統,就是你的任期到了,要做交接處理了.現在ios的應用可以支援後台運行了,這個方法用的較少,不像早期的時候,當使用者點擊home的時候,應用程式直接結束了,會調用這個方法,現在點擊home後,應用程式轉到幕後處理
- (void)applicationWillResignActive:(UIApplication *)application
說明:當應用程式將要入非使用中執行,在此期間,應用程式不接收訊息或事件,比如來電話了
- (void)applicationDidBecomeActive:(UIApplication *)application
說明:當應用程式進入活動狀態執行,這個剛好跟上面那個方法相反
- (void)applicationDidEnterBackground:(UIApplication *)application
說明:當程式被推送到背景時候調用。所以要設定後台繼續運行,則在這個函數裡面設定即可,比如使用者按下home去去做別的事情,程式進入後台後可以在這個函數中儲存一些資料,以便使用者再次從後台開啟應用時方便接著玩下去,
- (void)applicationWillEnterForeground:(UIApplication *)application
說明:當程式從後台將要重新回到前台時候調用,這個剛好跟上面的那個方法相反。
講解了上面的一些代理方法後,舉些例子說明一下方法被調用的順序
當使用者點擊表徵圖後 調用
1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2. applicationDidBecomeActive 程式已經處於活躍狀態了,
程式開著的情況下使用者按了home後,程式進入後台調用
1.applicationWillResignActive
2.applicationDidEnterBackground
當使用者從後台點擊表徵圖再次開啟應用
1.applicationWillEnterForeground
2.applicationDidBecomeActive
提示:
在支援後台執行的程式中,applicationDidEnterBackground:替代了applicationWillTerminate:作為程式快照儲存的事件.(現在應用基本都支援後台執行了)
iphone應用程式生命週期淺析