I\'m working on a project in Xcode version 4.2.1 and in iOS 5.0. I\'m wondering which function will be called when you completely terminate an application, which means even
Here's a good overview of the application lifecycle notifications & delegate messages on iOS 4.0 and newer. In short...
Your app will generally never see willTerminate, because the system generally only terminates your app once it's already suspended (in the background). Once your app is suspended, it gets no further chance to act(*), so there's no callback for that.
The didEnterBackground delegate message or notification should be considered your last chance to clean things up or save state before possible termination.
(*) Okay, your app can do stuff if it's in one of the supported background execution modes, like audio, VoIP, or navigation, but in that case it either hasn't been suspended yet or it's been un-suspended with an entry point specific to that background mode.
If the app is already suspended, it will not receive further notifications. Watch for the didEnterBackground
notification.
"applicationWillTerminate" method will be called only when application is not in suspended state while being terminated.
To understand this, considering currently your application is in foreground active state, go through following two cases:
Case 1: When you single tap Home button, app directly goes to suspended state by calling methods - (1) applicationWillResignActive and then (2) applicationDidEnterBackground.
Now when you try to quit/terminate app, by double tapping home button and then swiping up the current app screen from recent app screens, app is in suspended state. So, "applicationWillTerminate" method will not be called.
Case 2: When you double tap Home button, app goes to inactive state by calling method - (1) applicationWillResignActive.
Now when you try to quit/terminate app, by swiping up the current app screen from recent app screens, app is in inactive state (not in suspended state) while being terminated. So, "applicationWillTerminate" method will be called.
Look what Apple say:
For more info on this look - Apple's Official Documentation on applicationWillTerminate(_:)
- (void)applicationWillTerminate:(UIApplication *)application
It's in the UIApplicationDelegate protocol.
The documentation here spells out the behavior for this case.
In short, you'll only receive the applicationWillTerminate:
message if the app is running (either in the foreground or background) when it's terminated. So, unless your app is running in the foreground or in one of the long-running background modes (e.g. VoIP, Audio, or a long-running task indicated by beginBackgroundTaskWithExpirationHandler
) it will transition from the background
state to the suspended
state fairly quickly. In this case, you'll never receive the applicationWillTerminate:
message.