iOS筆記:應用的生命周期

進入一個iOS程序時,先看main.m里面的UIApplicationMain,若主類名為nil,則默認為UIApplication(這個類除了管理整個程序的生命周期之外什么都不做,它只賦值監聽事件然后交給delegateClass去做。),delegateClassName即委托類名(在工程新建時實例化一個對象)一般實例化為AppDelegate。
這時候,進入AppDelegate類里面,該類遵循UIApplicationDelegate協議,可以實現下面6種方法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//1.啟動程序,若直接啟動,launchOptions中是沒有數據的
//這是一個程序開始的根本,它決定了程序從哪里開始首次進入哪一個頁面。
//配置一個APP在整個生命過程中需要的參數或者功能的時候可以在這個方法進行配置,比如:數據統計、推送、分享、網絡監測等。
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
//2.將進入后臺,比如按下Home鍵或有電話信息打進來,此時暫停正在執行的任務
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
//3.已進入后臺,按下Home鍵之后,釋放共享資源;保存用戶數據到硬盤
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
//4.將進入前臺,如重新點擊程序 (撤銷方法2中的改變)
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
//5.重新點擊程序,若之前在后臺,則此時刷新用戶界面
}
- (void)applicationWillTerminate:(UIApplication *)application {
//6.程序終止,程序即將退出,在這里保存數據(同3)
}
APP聲明周期中并不是所有狀態切換都有響應方法來通知,如從后臺Background到掛起Suspended。所以當按下Home鍵的時候,我們只知道調用了WillResignActive和DidEnterBackground方法,但其實應用程序會迅速從Background進入Suspended。

以上是在AppDelegate類監聽APP各種狀態。如果是在其他類里想要監聽APP運行狀態,應該使用通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(terminateAPP) name:UIApplicationWillTerminateNotification object:nil];
//當本類監聽到程序即將退出時,就會調用terminateAPP方法
-(void)terminateAPP{
NSLog(@"%@",NSStringFromSelector(_cmd));
}

在最后用完通知后也要將觀察者移除:

-(void)dealloc{
 [[NSNotificationCenter defaultCenter] removeObserver:self];
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容