AppDelegate中幾個常用回撥函式的呼叫時機

Hext123發表於2018-06-14

由於AppDelegate中的回撥函式非常多, 使用起來感覺很混亂, 不知道什麼情況該用哪個回撥函式. 於是百度+實測整理出來了一些常用回撥函式的呼叫時機, 發出來做個筆記, 也供大家參考參考

  1. – (void)applicationDidFinishLaunching:(UIApplication *)application; 當應用程式啟動時(不包括已在後臺的情況下轉到前臺),呼叫此回撥。此方法基本已經棄用,改用第2個方法代替。

  2. – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; 當應用程式啟動時(不包括已在後臺的情況下轉到前臺),呼叫此回撥。launchOptions是啟動引數,假如使用者通過點選push通知啟動本應用,這個引數裡會儲存一些push通知的資訊。而如果使用者通過其它應用或URL連結啟動本應用(openURL), 則這個引數裡會儲存一些啟動本應用的應用和URL的一些資訊。

  3. – (void)applicationDidBecomeActive:(UIApplication *)application; 當應用程式全新啟動,或者在後臺轉到前臺,完全啟用時,都會呼叫這個方法。如果應用程式是以前執行在後臺,這時可以選擇重新整理使用者介面。

  4. – (void)applicationWillResignActive:(UIApplication *)application; 當應用從活動狀態主動到非活動狀態的應用程式時會呼叫這個方法。這可導致產生某些型別的臨時中斷(如傳入電話呼叫或SMS訊息)。或者當使用者退出應用程 序,它開始過渡到的背景狀態。使用此方法可以暫停正在進行的任務,禁用定時器,降低OpenGL ES的幀速率。遊戲應該使用這種方法來暫停遊戲。 呼叫時機可能有以下幾種:鎖屏,按HOME鍵,下接狀態列,雙擊HOME鍵彈出低欄,等情況。

  5. – (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url; 這個方法已不再支援,可能會在以後某個版本中去掉。建議用下面第6個方法代替

  6. – (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation; 當使用者通過其它應用啟動本應用時,會回撥這個方法,url引數是其它應用呼叫openURL:方法時傳過來的。sourceApplication引數是開啟本應用的應用的資訊。

  7. – (void)applicationDidReceiveMemoryWarning:(UIApplication *)application; 當應用可用記憶體不足時,會呼叫此方法,在這個方法中,應該儘量去清理可能釋放的記憶體。如果實在不行,可能會被強行退出應用。

  8. – (void)applicationWillTerminate:(UIApplication *)application; 當應用退出,並且程式即將結束時會調到這個方法,一般很少主動調到,更多是記憶體不足時是被迫調到的,我們應該在這個方法裡做一些資料儲存操作。

  9. - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken NS_AVAILABLE_IOS(3_0); - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error NS_AVAILABLE_IOS(3_0); 當客戶端註冊遠端通知時,會回撥上面兩個方法。 如果成功,則回撥第一個,客戶端把deviceToken取出來發給服務端,push訊息的時候要用。 如果失敗了,則回撥第二個,可以從error引數中看一下失敗原因。

    注:註冊遠端通知使用如下方法:

    UIRemoteNotificationType t=UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound;
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:t];
    複製程式碼
  10. – (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo; 當應用在前臺執行中,收到遠端通知時,會回撥這個方法。 當應用在後臺狀態時,點選push訊息啟動應用,也會回撥這個方法。

  11. – (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification; 當應用收到本地通知時會調這個方法,同上面一個方法類似。 如果在前臺執行狀態直接呼叫,如果在後臺狀態,點選通知啟動時,也會回撥這個方法

  12. – (void)applicationDidEnterBackground:(UIApplication *)application; 當使用者從臺前狀態轉入後臺時,呼叫此方法。使用此方法來釋放資源共享,儲存使用者資料,無效計時器,並儲存足夠的應用程式狀態資訊的情況下被終止後,將應用 程式恢復到目前的狀態。如果您的應用程式支援後臺執行,這種方法被呼叫,否則呼叫applicationWillTerminate:使用者退出。

  13. – (void)applicationWillEnterForeground:(UIApplication *)application; 當應用在後臺狀態,將要進行動前臺執行狀態時,會呼叫此方法。 如果應用不在後臺狀態,而是直接啟動,則不會回撥此方法。

相關文章