请问您对批准的方法有何建议?
我有四个需要顺序运行的进程:
$baseStr = 'www.abc.com/cdf/?x=10';
$searchStr = 'www.abc.com/';
$insertStr = 'xxx/';
$a = str_replace($searchStr, $searchStr.$insertStr, $baseStr);
echo '<pre>';
print_r($a);
//Output: www.abc.com/xxx/cdf/?x=10
这些使用调度队列计算数据并更新进度条(圆形)和其他屏幕文字,以进行UI更新。
按原样运行它们,瞧瞧它们都同时发射了(真是令人惊讶!)。
如何使顶级调用按顺序运行(如上所述),并且在更新文字的过程中是否需要对DispatchQueues进行更改,例如:
calculateProcess1()
calculateProcess2()
calculateProcess3()
calculateProcess4()
启动进程(calculateProcess1-4())需要从main运行。这应该在ViewDidLoad中,按钮操作中还是最安全的方法?
答案 0 :(得分:2)
1-请勿在主线程中sync
,因为它会导致运行时崩溃,应为async
DispatchQueue.main.sync {
2-
这应该在ViewDidLoad中,按钮操作中还是最安全的方法是什么?
这取决于您,这里没有与安全相关的东西,可以将其实现为您的用户体验
3-要先后运行它们,请创建一个自定义队列,然后在其中分派它们,因为如果所有这些方法中的代码在该队列的同一线程中运行,它将依次运行,这意味着您不在内部在另一个队列中分派,您还可以使用DispatchGroup
在所有操作完成后得到通知
答案 1 :(得分:2)
一种方法是使用Operation
和OperationQueue
。在maxConcurrentOperationCount: Int
上将1
设置为OperationQueue
,将强制依次执行操作。
(以前称为NSOperation
和NSOperationQueue
)
此博客文章可能会有所帮助:https://nshipster.com/nsoperation/
当然还有很棒的WWDC15会议:Advanced NSOperations
答案 2 :(得分:2)
如果要保持简单,可以为calculateProcess
方法提供回调块,然后将它们嵌套即可。
calculateProcess1() {
calculateProcess2() {
calculateProcess3() {
calculateProcess4() {}
}
}
}
这应该在ViewDidLoad中,还是一个按钮动作或最多 安全的方法?
viewDidLoad
可能就是您想要的。请记住,如果实例化一个相同类型的新viewController并显示它,那么对于该新控制器,它也会再次发生一次。另外,如果您对视图框架进行任何操作,都不能保证将其放置在viewDidLoad
中,但是如果您只是在更新文本,那应该没问题。