【发布时间】:2020-09-15 21:23:01
【问题描述】:
我有一个操作队列设置如下:
let queue = OperationQueue()
queue.name = "com.company.myQueue"
queue.qualityOfService = .userInitiated
queue.maxConcurrentOperationCount = 64
...
var current = 0
var totalCount = someArray.count
for i in someArray {
...
let op = BlockOperation {
... // do some database queries
current += 1
}
op.completionBlock = {
DispatchQueue.main.async {
let nData: [String: CGFloat] = ["value": CGFloat(current/totalCount)]
NotificationCenter.default.post(name:Notification.Name(rawValue: "update"), object: nil, userInfo: nData)
}
queue.addOperation(op)
}
在我的ViewController 中,我收听通知并使用百分比更新UILabel。问题是虽然我没有得到任何中间值......一旦完成所有操作,它就会从0 直接跳转到100。
我做错了什么?
谢谢
【问题讨论】:
-
无关,但我可能会建议
extension Notification.Name { static let update = Notification.Name(rawValue: "update") }。然后你可以做NotificationCenter.default.post(name: .update, object: nil, userInfo: nData)之类的事情。我建议不要将maxConcurrentOperation计数为 64,因为如果这样做,您很容易耗尽有限数量的工作线程。您通常应该保持在 64 岁以下。
标签: swift blockoperation operationqueue