我的 iPhone 应用程序将在运行应用程序时将多个内容下载到 Documents 文件夹。我想在应用程序终止时删除下载的文件。我的应用程序在目标 4.3 或更高版本上运行并启用了 ARC。从文档文件夹中删除内容的最佳位置是什么?
- (void)applicationWillTerminate:(UIApplication *)application
应用程序终止时未调用。
我的 iPhone 应用程序将在运行应用程序时将多个内容下载到 Documents 文件夹。我想在应用程序终止时删除下载的文件。我的应用程序在目标 4.3 或更高版本上运行并启用了 ARC。从文档文件夹中删除内容的最佳位置是什么?
- (void)applicationWillTerminate:(UIApplication *)application
应用程序终止时未调用。
寻找– applicationDidEnterBackground:而不是applicationWillTerminate
.
在 iOS 4.0 及更高版本中,当用户退出支持后台执行的应用程序时,将调用此方法而不是 applicationWillTerminate: 方法。
applicationWillTerminate
代表在 iOS4 之前的世界中“退出”应用程序的含义。
在现代(即 iOS4+)应用程序中,当用户退出应用程序时,应用程序会进入后台并暂停(因此用户可以快速重新进入)。因此,应用程序实际上并没有终止,如果需要恢复内存,iOS 仍然可以随时终止它。这种情况经常发生,这意味着如果您暂停您的应用程序并在第二天返回它,您会发现该应用程序已终止。坏事是暂停的应用程序在终止时不会收到applicationWillTerminate
消息,因此applicationDidEnterBackground:
当用户退出应用程序时,您必须自己清理的最后“保证”机会也是如此。
无论如何,如果您在应用程序 plist 文件中进行applicationWillTerminate
设置,当用户退出您的应用程序(并且您的应用程序相应终止)时,您仍然可以被调用。UIApplicationExitsOnSuspend
为了完整起见,我还要补充一点 applicationWillTerminate
:
可能在应用程序在后台运行(未挂起)并且系统出于某种原因需要终止它的情况下调用。
但这是一个实际在后台运行的应用程序的特定用例(这是计算数量的应用程序类型的情况)。
总结一下,清理文档的正确位置是:
applicationDidEnterBackground
如果您正在运行 iOS4+ 并且未UIApplicationExitsOnSuspend
在您的应用 plist 文件中设置;
applicationWillTerminate
如果您在 iOS3 上运行并UIApplicationExitsOnSuspend
在您的应用 plist 文件中进行设置。
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: