如何执行用户退出iPhone应用程序的最后一个动作?

当用户在iPhone上杀死应用程序时,有没有办法执行最后一个动作?

在UIApplicationDelegate中有applicationWillTerminate:但据我所知,它不能保证在应用程序终止时被调用。 有另一种方法吗?

你不能依靠applicationWillTerminate被调用。 从文档:

对于不支持后台执行的应用程序或与iOS 3.x或更低版本链接的应用程序,当用户退出应用程序时,总是调用此方法。 对于支持后台执行的应用程序,当用户退出应用程序时,通常不会调用此方法,因为在此情况下应用程序只是移动到后台。 但是,这种方法可能会在应用程序在后台运行(未挂起),系统因某种原因需要终止的情况下调用。

保存任何状态的适当位置是应用程序进入后台的时间。 一旦发生这种情况,就无法知道应用程序是否会返回到前台,或者如果它被杀死,然后从头开始。

当您使用其中一个项目模板时,所有关于您的应用程序状态的方法都在您的AppDelegate中

将代码放在applicationWillResignActive:方法中。 如果你的应用程序进入非活动状态(终止或不),它会被调用。

 - (void)applicationWillResignActive:(UIApplication *)application { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. } 

保存状态的“正确”位置在-applicationDidEnterBackground:-applicationWillTerminate: 。 不要担心双重储蓄; 通常只有其中一个被调用(IME, -applicationWillTerminate:当你的应用程序在后台死亡时不被调用)。

警告-applicationDidEnterBackground:保证被调用,因为它是你的应用程序进入后台之后调用的(因此在没有通知的情况下就有可能被杀死)。 如果设备的内存不足,则会导致应用程序停止使用。 避免这种情况的最好方法是不要使用太多的内存。

可以使用-applicationWillResignActive:但我不build议这样做:应用程序变得不活跃。 显而易见的是系统对话框(位置/隐私提示,Wi-Fi,显示为警报和警报的通知),TWTweetSheet,以及我怀疑MFMailComposeViewController,MFMessageComposeViewController,通知中心,应用程序切换条(例如更改音轨/启用方向锁)。

你可以在appdelegate中使用applicationWillResignActive方法,或者你可以执行以下操作,如果你想保存的东西,但由于某种原因,你不想在应用程序委托中做到这一点:

 - (void) viewDidLoad/init { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myApplicationWillResign) name:UIApplicationWillResignActiveNotification object:NULL]; } - (void) myApplicationWillResign { NSLog(@"About to die, perform last actions"); }