ApplicationWillTerminate在iOS 4.0中

时间:2010-06-29 09:57:55

标签: iphone ios4 uiapplicationdelegate

在iOS 4.0中未调用applicationWillTerminate委托方法  当我点击Home按钮时,我看到appWillResignActive和applicationDidEnterBackground委托方法被调用。

 - (void)applicationWillResignActive:(UIApplication *)application
{
  NSLog(@"Application Did Resign Active");
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
  NSLog(@"Application Did Enter Background");
}

当我双击Home按钮并再次启动Application时,我发现applicationWillEnterForeground和applicationDidBecomeActive委托方法被调用。

 - (void)applicationWillEnterForeground:(UIApplication *)application
{
  NSLog(@"Application Will Enter Foreground");
}



- (void)applicationDidBecomeActive:(UIApplication *)application
{
  NSLog(@"Application Did Become Active");
}

但是我想知道何时调用applicationWillTerminate委托方法,在那里我做一些DB /文件备份例程。

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

}

我甚至试图点击减号并删除在后台运行的App,但它仍然没有调用任何委托方法。

任何想法???

4 个答案:

答案 0 :(得分:52)

来自iPhone应用程序编程指南:

  

即使您使用iPhone SDK 4及更高版本开发应用程序,您仍必须为应用程序终止做好准备。如果内存受限制,系统可能会从内存中删除应用程序以腾出更多空间。如果您的应用程序当前处于暂停状态,系统会在不事先通知的情但是,如果您的应用程序当前正在后台运行,则系统会调用应用程序委托的applicationWillTerminate:方法。您的应用程序无法通过此方法请求额外的后台执行时间。

是的,在iOS 4中通常不会经常调用applicationWillTerminate:。如果必须保存数据,则应在applicationWillTerminate:applicationDidEnterBackground:中执行此操作。

答案 1 :(得分:4)

WWDC 2010会话Adopting Multitasking on iPhone OSPart 2)非常清楚地解释了应用程序状态转换。

答案 2 :(得分:2)

当用户点击iOS4中的“主页”按钮时,我有一个终止应用程序的解决方案。 这将调用applicationWillTerminate委托方法,而不是进入后台进程。

  1. 打开您的info.plist文件
  2. 添加密钥UIApplicationExitsOnSuspend
  3. 将新密钥设为YES

答案 3 :(得分:1)

实际上您也可以使用此步骤来执行此操作。

  1. 打开您的info.plist文件
  2. 添加密钥 - >应用程序不在后台运行
  3. 将此键值设置为YES