iphone应用程序终止时删除文档文件夹中的文件
Posted
技术标签:
【中文标题】iphone应用程序终止时删除文档文件夹中的文件【英文标题】:delete files in documents folder when iphone app terminated 【发布时间】:2012-12-24 09:46:53 【问题描述】:我的 iPhone 应用程序将在运行应用程序时将多个内容下载到 Documents 文件夹。我想在应用程序终止时删除下载的文件。我的应用程序在目标 4.3 或更高版本上运行并启用了 ARC。从文档文件夹中删除内容的最佳位置是什么?
- (void)applicationWillTerminate:(UIApplication *)application
应用程序终止时不会被调用。
【问题讨论】:
"applicationWillTerminate 在应用程序终止时不会被调用" - 好吧,它被调用了,至少你的应用程序没有终止,只是暂停。 来自documentation,对于支持后台执行的应用程序,在用户退出应用程序时一般不会调用此方法,因为在这种情况下应用程序只是移动到后台。但是,此方法可能会在应用程序在后台运行(未挂起)并且系统出于某种原因需要终止它的情况下调用。 请注意,他们使用了 “may be”。所以不能保证它会被调用。 【参考方案1】:寻找– applicationDidEnterBackground: 而不是applicationWillTerminate
。
在 ios 4.0 及更高版本中,当用户退出支持后台执行的应用程序时,将调用此方法而不是 applicationWillTerminate: 方法。
applicationWillTerminate
代表在 iOS4 之前的世界中“退出”应用程序的含义。
在现代(即 iOS4+)应用程序中,当用户退出应用程序时,应用程序会进入后台并暂停(因此用户可以快速重新进入)。因此,应用程序实际上并没有终止,如果需要恢复内存,iOS 仍然可以随时终止它。这种情况经常发生,这意味着如果您暂停您的应用程序并在第二天返回它,您会发现该应用程序已终止。糟糕的是,暂停的应用程序在终止时不会收到applicationWillTerminate
消息,因此applicationDidEnterBackground:
是您在用户退出后必须自行清理的最后一个“保证”机会应用程序。
无论如何,如果您在应用 plist 文件中设置 UIApplicationExitsOnSuspend
,您仍然可以在用户退出您的应用(并且您的应用相应终止)时调用 applicationWillTerminate
。
为了完整起见,我还要加上applicationWillTerminate
:
可能在应用程序在后台运行(未挂起)并且系统出于某种原因需要终止它的情况下调用。
但这是实际在后台运行的应用程序的特定用例(这是计算数量的应用程序类型的情况)。
总结一下,清理文档的正确位置是:
applicationDidEnterBackground
如果您运行的是 iOS4+ 并且不要在您的应用 plist 文件中设置 UIApplicationExitsOnSuspend
;
applicationWillTerminate
如果您在 iOS3 上运行并在您的应用 plist 文件中设置 UIApplicationExitsOnSuspend
。
【讨论】:
applicationDidEnterBackground:
将在应用程序进入后台模式时调用,而不是在应用程序终止时调用,除非在 info.plist 文件中将 UIApplicationExitsOnSuspend
设置为 YES
。所以它不是applicationWillTerminate
的替代品。
@ACB:感谢您的评论。我指的是 Apple UIApplicationDelegate 协议参考关于applicationDidEnterBackground
的内容。在许多情况下(几乎总是,除了后台运行的应用程序)进入后台非常接近被终止,因为您的应用程序可以在暂停时随时终止,而不会收到任何通知。无论如何,为了完整性,我扩展了我的答案。
@Sivannarayana,由您决定将其保存在哪里。如果您想在用户最小化应用程序(进入后台模式)时清理它,您可以在applicationDidEnterBackground
方法中进行。但是,只要用户只是切换应用程序,这就会清除它。但是,如果您在 applicationWillTerminate
中执行此操作,则无法保证在终止时会调用 applicationWillTerminate
。
@sergio,如果一个应用程序进入后台,它被终止只是时间问题。我不确定你的意思是什么,但我现在有很多应用程序在后台模式下保存了几个月,我根本没有看到它们被终止。它只是从我离开的地方开始。因此,我不同意该评论。我觉得终止应用程序和暂停应用程序之间有明显的区别。
@sergio,是的,我同意。但那里总有一个“如果”。 90% 的场景,只要进入后台模式,它就不会被终止。您的评论让我们觉得应用程序在进入后台模式后会立即终止,这是不正确的。只有满足您上面提到的标准,它才有可能被终止。否则,在正常情况下,如果您尝试将其置于前台,它应该可以正常工作。【参考方案2】:
因为如果您在 iOS 4+ 上运行(并且应用程序在进入后台时不会强制退出),您将不会收到 applicationWillTerminate:
,如果您真的希望仅在应用程序终止时清理这些东西,您应该这样做在applicaitonDidFinishedLaunching:
【讨论】:
您的回答具有误导性。applicaitonDidFinishedLaunching
在应用启动时调用,而不是在终止时调用。以上是关于iphone应用程序终止时删除文档文件夹中的文件的主要内容,如果未能解决你的问题,请参考以下文章