0

我的 iPhone 应用程序将在运行应用程序时将多个内容下载到 Documents 文件夹。我想在应用程序终止时删除下载的文件。我的应用程序在目标 4.3 或更高版本上运行并启用了 ARC。从文档文件夹中删除内容的最佳位置是什么?

- (void)applicationWillTerminate:(UIApplication *)application

应用程序终止时未调用。

4

2 回答 2

2

寻找– applicationDidEnterBackground:而不是applicationWillTerminate.

在 iOS 4.0 及更高版本中,当用户退出支持后台执行的应用程序时,将调用此方法而不是 applicationWillTerminate: 方法。

applicationWillTerminate代表在 iOS4 之前的世界中“退出”应用程序的含义。

在现代(即 iOS4+)应用程序中,当用户退出应用程序时,应用程序会进入后台并暂停(因此用户可以快速重新进入)。因此,应用程序实际上并没有终止,如果需要恢复内存,iOS 仍然可以随时终止它。这种情况经常发生,这意味着如果您暂停您的应用程序并在第二天返回它,您会发现该应用程序已终止。坏事是暂停的应用程序在终止时不会收到applicationWillTerminate消息,因此applicationDidEnterBackground:当用户退出应用程序时,您必须自己清理的最后“保证”机会也是如此。

无论如何,如果您在应用程序 plist 文件中进行applicationWillTerminate设置,当用户退出您的应用程序(并且您的应用程序相应终止)时,您仍然可以被调用。UIApplicationExitsOnSuspend

为了完整起见,我还要补充一点 applicationWillTerminate

可能在应用程序在后台运行(未挂起)并且系统出于某种原因需要终止它的情况下调用。

但这是一个实际在后台运行的应用程序的特定用例(这是计算数量的应用程序类型的情况)。

总结一下,清理文档的正确位置是:

  1. applicationDidEnterBackground如果您正在运行 iOS4+ 并且未UIApplicationExitsOnSuspend在您的应用 plist 文件中设置;

  2. applicationWillTerminate如果您在 iOS3 上运行UIApplicationExitsOnSuspend在您的应用 plist 文件中进行设置。

于 2012-12-24T09:50:20.073 回答
0

as you will not get an applicationWillTerminate: if you are running on iOS 4+ (and app does not quit forcefully on entering background) if you really looking for cleanup the stuff only if the application gets terminated, you should do it in applicaitonDidFinishedLaunching:

于 2012-12-24T09:53:06.053 回答