我需要为我的应用程序(在Swift中)编写一些应该在应用程序终止之前执行的代码。当我在appDelegate中使用appWillTerminate时,它不在后台但我需要它在后台或前台终止时运行代码。我该怎么做 ??
答案 0 :(得分:0)
以下策略可能会起作用,而且它更像是纯粹的Swift语言方法而不是iOS方法:每个类都可以覆盖AppDelegate
方法。每当需要从堆中释放类时,在释放类之前调用de-initializer。这可能发生,例如当课程超出范围,并且没有更多的保留计数。当您的应用终止时,{{1}}可能会发生这种情况。
答案 1 :(得分:0)
您可以将您的代码放在applicationDidEnterBackground中的此方法beginBackgroundTaskWithName:expirationHandler:
中。这种方法为您的应用程序提供了额外的时间来完成您需要完成的任务。更多文档在这里执行有限长度任务: https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
答案 2 :(得分:0)
如果app在后台并且没有执行任何任务,则该应用程序处于暂停状态。 当应用程序处于暂停状态时,终止应用程序将不会调用applicationWillTerminate。但是,您可以开始后台任务 或启用后台模式。 e.g。
func applicationDidEnterBackground(_ application: UIApplication) {
bgTask = application.beginBackgroundTask(withName: "MyTask") {
application.endBackgroundTask(self.bgTask!)
self.bgTask = UIBackgroundTaskInvalid
}
}