【发布时间】:2021-08-03 13:39:52
【问题描述】:
我看到很多使用类成员变量将后台任务的值传递给完成块的例子:
self.bgTask = UIApplication.sharedApplication()
.beginBackgroundTaskWithName("bg task", expirationHandler: { () -> Void in
UIApplication.sharedApplication().endBackgroundTask(self.bgTask)
self.bgTask = UIBackgroundTaskInvalid
})
如果此代码在第一个后台任务仍在运行时被调用两次,第二次调用,则self.bgTask 将被新任务的标识符覆盖,UIApplication.sharedApplication().endBackgroundTask(self.bgTask) 可能永远不会被调用。
如果我改为声明一个局部变量,那么它的值会在初始化之前被闭包捕获。也不好。
如何安全地将任务 ID 传递给其完成处理程序?如果我上面的推理是错误的,请纠正我。
【问题讨论】: