此函数用于重新安排工作项的执行:
class MyClass {
var id: String?
var workItem: DispatchWorkItem?
var isDoing = false
func myFunction() {
guard let id = self.id else { return }
isDoing = true
NotificationCenter.default.post(name: MyNotification, object: nil, userInfo: ["id": id])
workItem?.cancel()
workItem = DispatchWorkItem {
self.isDoing = false
NotificationCenter.default.post(name: MyNotification, object: nil, userInfo: ["id": id])
}
if let workItem = workItem {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + DispatchTimeInterval.seconds(10), execute: workItem)
}
}
}
它在开发中运行良好,但设计似乎可疑,所以我问一些基本问题:
-
能
workItem
如果没有
workItem?.cancel()
在队列尝试执行
工作项
是吗?
-
能
id
里面
工作项
什么时候都没有
工作项
由作用域执行或保留
let id = self.id
是吗?
-
能
isDoing
里面
工作项
当
工作项
如果
MyClass
对象已被释放?换句话说,预定的
工作项
当
类名
对象已解除分配?