Swift 调度队列-嵌套、优化和;控制
你能就批准的方法给我一些建议吗 我有四个进程需要按顺序运行:Swift 调度队列-嵌套、优化和;控制,swift,grand-central-dispatch,Swift,Grand Central Dispatch,你能就批准的方法给我一些建议吗 我有四个进程需要按顺序运行: calculateProcess1() calculateProcess2() calculateProcess3() calculateProcess4() 它们使用调度队列计算数据并更新进度条(循环)和其他屏幕文字,以进行UI更新 按原样运行它们,你会发现它们同时开火(真是令人惊讶!) 如何使顶级调用按顺序运行(如上所述),以及在更新文本的过程中是否需要更改DispatchQueues,例如: DispatchQueue.mai
calculateProcess1()
calculateProcess2()
calculateProcess3()
calculateProcess4()
它们使用调度队列计算数据并更新进度条(循环)和其他屏幕文字,以进行UI更新
按原样运行它们,你会发现它们同时开火(真是令人惊讶!)
如何使顶级调用按顺序运行(如上所述),以及在更新文本的过程中是否需要更改DispatchQueues,例如:
DispatchQueue.main.sync {
let progressPercentage = (day*100/365)
self.progressLabel.text = String(Int(progressPercentage))+"%"
}
启动进程(calculateProcess1-4())需要从main运行。这应该是ViewDidLoad、按钮操作还是最安全的方法 1-不要在主线程中进行
sync
,因为它会导致运行时崩溃,应该是async
DispatchQueue.main.sync {
2-
这应该是ViewDidLoad、按钮操作还是最安全的方法
这取决于您这里没有与安全相关的东西,将其作为您的UX实现
3-要在dequence中运行它们,请创建一个自定义队列,然后在其中分派它们,因为如果所有这些方法中的代码都在队列的同一线程中运行,则它将以串行方式运行,这意味着您不会在另一个队列中内部分派,您还可以使用
DispatchGroup
在所有操作完成后收到通知一种方法是使用和。将OperationQueue
上的maxConcurrentOperationCount:Int
设置为1
,将强制按顺序依次执行操作
(以前称为NSOperation
和NSOperationQueue
)
这篇博文会很有帮助:
当然还有非常棒的WWDC15会话:如果您想保持简单,可以为
calculateProcess
方法提供回调块,并简单地嵌套它们
calculateProcess1() {
calculateProcess2() {
calculateProcess3() {
calculateProcess4() {}
}
}
}
这应该是ViewDidLoad、按钮操作还是最重要的
安全方法
viewDidLoad
可能就是您想要的。请记住,如果实例化同一类型的新viewController并显示它,则该新控制器也会再次出现。此外,如果您正在使用图幅进行任何操作,则不能保证这些图幅在viewdiload
中列出,但如果您只是在更新文本,则应该可以 感谢大家的指导-我将阅读并实现。在使用嵌套时获取“传递给不带参数的调用的参数”:calculateProcess1(){calculateProcess2(){calculateProcess3(){calculateProcess4(){}}}},而:calculateProcess1()calculateProcess2()calculateProcess3()calculateProcess4()编译。@EdwardHasted您必须将回调块作为参数添加到方法中。这很好,但很难理解——让我仔细阅读这些笔记——非常感谢。