我有一个关于在后台线程上调用UI API的问题。
我需要视图信息来保存视图,例如view.center,view.transform,view.frame.width。
此编码需要在后台线程而非主线程上执行。
由于此编码逻辑具有很高的计算成本,因此会影响对用户交互(如Apple Pencil输入)的响应。
所以我关闭了主线程检查器,并在后台线程上调用UI API。
我不需要任何UI更新,只需要收集UIView,UITextView,CALayer的信息。
在这种情况下,在后台线程上调用UI API是否有任何可能的问题?
有一些警告消息,但是在调试模式下我找不到任何问题。
请提供任何有关保存视图信息的正确方法的建议。
谢谢。
func pendingSave(pending: Bool) {
if let save = self.pendingRequestSave {
save.cancel()
}
if !pending {
self.save(workItem: nil)
return
}
self.pendingRequestSave = DispatchWorkItem(qos: .userInitiated,flags: .enforceQoS) { [weak self] in
self?.save(workItem: self?.pendingRequestSave)
}
//savingQueue is serial DispatchQueue
DrawingViewController.savingQueue.asyncAfter(deadline: .now() + .seconds(1),execute: self.pendingRequestSave!)
}
func save(workItem: DispatchWorkItem?) {
let encoder = JSONEncoder()
let jsonData = try! encoder.encode(self.canvasView)
if workItem == nil || !(workItem!.isCancelled) {
DispatchQueue.main.async {
MonthService.save(dateId: self.curMonthInfo,contents: jsonData)
}
}
}
[Assert]不支持在主线程上使用UIKit视图定制API。 -setBackgroundColor:发送到>