2012-04-17 84 views
6

我正在使用Xcode版本4.2.1和iOS 5.0中的項目。我想知道當你完全終止一個應用程序時哪個函數會被調用,這意味着即使用戶強制在後臺運行的應用程序被從主屏幕終止的時候。我假設iPhone應用終止時調用哪個函數?

(void)applicationWillTerminate:(UIApplication *)application

會被調用,但它甚至終止後臺應用程序後,竟然有人不叫。 我基本上想要做的就是在應用程序完全終止前調用一個我創建的方法,因此需要知道在應用程序結束時調用哪個函數。

謝謝。

+0

能否請您選擇/勾選答案之一。 – 2016-12-01 10:05:10

回答

1

如果應用程序已被暫停,它將不會收到進一步的通知。注意didEnterBackground通知。

+0

你是說我不知道​​我想要做什麼,只要我在主屏幕上?至於功能,即使看到這樣的功能,我也沒有發現它。 – Max 2012-04-17 23:27:33

+0

-1:沒有「willSuspend」通知或委託消息。你可能想要「didEnterBackground」。 – rickster 2012-04-17 23:35:30

+0

我可能不想要它,因爲我想在應用程序完全終止時調用方法,而不是在按Home按鈕時調用方法。也就是說,我不想在進入後臺時調用我的方法。 – Max 2012-04-17 23:39:41

0
- (void)applicationWillTerminate:(UIApplication *)application 

它在UIApplicationDelegate協議中。

0

documentation here說明了這種情況的行爲。

總之,如果應用程序正在運行(在前臺或後臺)終止時,您將只收到applicationWillTerminate:消息。因此,除非您的應用在前臺或長時間運行的後臺模式(例如VoIP,音頻或由beginBackgroundTaskWithExpirationHandler指示的長時間運行的任務)中運行,否則它將相當快地從background狀態轉變爲suspended狀態。在這種情況下,您永遠不會收到applicationWillTerminate:消息。

5

Here's a good overview應用程序生命週期通知&在iOS 4.0和更新的版本上委派消息。總之...

你的應用程序將永遠不會看到willTerminate,因爲系統一般只會終止你的應用程序,一旦它已經暫停(在後臺)。一旦你的應用程序被暫停,它不會再有機會採取行動(*),所以沒有回調。

didEnterBackground委託消息或通知應被視爲您最後一次清理事件或在可能終止之前保存狀態的機會。


(*)好吧,你的應用程序可以做的東西,如果它在支持後臺運行模式中的一種,如音頻,VoIP或導航,但在這種情況下,要麼尚未暫停或它的已被取消暫停,並具有特定於該背景模式的入口點。

+0

因此,在用戶強行終止在後臺運行的應用程序的情況下,將沒有好方法來調用我的方法。感謝您的幫助。 – Max 2012-04-18 00:01:57

+0

即使那樣,你可能也不會收到通知;除非用戶在幾秒內通過應用切換器終止您的應用,否則您的應用將被暫停。 – rickster 2012-04-18 01:27:36

-1

的三種方法將是有幫助的:當應用程序是不在暫停狀態而被終止

- (void)applicationWillResignActive:(UIApplication *)application 
    { 
    } 

    - (void)applicationDidEnterBackground:(UIApplication *)application 
    { 
    } 

    - (void)applicationWillTerminate:(UIApplication *)application 
    { 
    } 
18

applicationWillTerminate」方法將被稱爲僅。

要理解這一點,考慮到目前你的應用程序是在前臺活躍狀態,經過以下兩種情況:

案例1:當你單一的水龍頭 Home鍵,應用程序直接調用進入暫停狀態方法 - (1)applicationWillResignActive然後(2)applicationDidEnterBackground。

現在,當您嘗試退出/終止應用程序時,通過雙擊主頁按鈕,然後從最近的應用程序屏幕向上滑動當前應用程序屏幕,應用程序處於暫停狀態。所以,applicationWillTerminate」方法將不會被調用。

案例2:當你雙擊 Home鍵,應用程序去調用方法無效狀態 - (1)applicationWillResignActive。

現在,當您嘗試退出/終止應用程序時,通過從最近的應用程序屏幕向上滑動當前應用程序屏幕,應用程序在終止時處於非活動狀態(不處於暫停狀態)。所以,applicationWillTerminate」方法將被調用。

是什麼蘋果說:enter image description here

有關這一下詳細信息 - Apple's Official Documentation on applicationWillTerminate(_:)

+0

很好的答案,謝謝!將有一個很酷的也有一個鏈接到Apple文檔。 – 2016-12-01 08:09:57