gpt4 book ai didi

swift - 如何获取 DispatchQueue() 代码以在应用程序退出时进行清理

转载 作者:搜寻专家 更新时间:2023-11-01 06:11:49 26 4
gpt4 key购买 nike

我有一个在 DispatchQueue 中运行的进程,它创建了一个临时文件。该文件在延迟 block 中被删除,因此无论是否抛出错误或我只是从 process() 正常返回,都会进行清理。看下面的代码

func process() throws {
let file = createTemporaryFile()
defer {
deleteTemporaryFile(file)
}
try callCodeThatMightThrowErrors()
}

dispatchQueue.async {
do {
try process()
} catch {
dealWithError()
}
}

现在一切正常,直到我退出我的应用程序。如果我在 process() 函数中间有一个 DispatchQueue,则延迟 block 不会运行并且文件不会被删除,我会在系统中留下一个临时文件。有什么办法可以调用这个延迟 block 吗?我宁愿不必存储需要在应用程序退出时删除的临时文件的全局数组。

最佳答案

您需要:

  • a) 防止您的应用程序在您的进程运行时终止,或者
  • b) 知道何时终止并取消您的过程

无论哪种方式,NSApplicationDelegate 都有一个方法 (applicationShouldTerminate) 来询问您它是否可以终止。当您的进程正在运行时,您应该返回 NSTerminateLater,然后当进程完成时,调用 replyToApplicationShouldTerminate

您还应该确保在您的进程运行时禁用突然终止,以便您实际获得终止委托(delegate)。请参阅 ProcessInfo disableSuddenTermination`

关于swift - 如何获取 DispatchQueue() 代码以在应用程序退出时进行清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54694881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com