ApplicationWillTerminate在iOS 4.0中

applicationWillTerminate委托方法没有在iOS 4.0中调用当我点击主页button,我看到applicationWillResignActive和applicationDidEnterBackground委托方法被调用。

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

当我双击主页button,再次启动应用程序,我发现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{ } 

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

有任何想法吗 ???

从iPhone应用程序编程指南:

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

所以是的, applicationWillTerminate:通常不会在iOS 4中经常被调用。如果你必须保存数据,你应该在applicationWillTerminate:applicationDidEnterBackground:中都这么做。

WWDC 2010会议采用iPhone OS上的多任务处理 ( 第2部分 )非常好地解释了应用程序状态转换。

当用户点击iOS4中的主页button时,我得到了一个终止应用程序的解决scheme。 这将调用applicationWillTerminate委托方法而不是进入后台进程。

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

其实你也可以用这一步来做。

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