我有一个可能偶尔执行大量CPU处理的应用程序。 事件的顺序是:
1)向用户询问一些问题 2)启动活动指标 3)做CPU密集型的东西 4)显示结果
但是,当我运行此操作时,活动指示器不会在步骤2显示,而是仅在步骤4显示。我相信这是因为操作系统未更新UI。 关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
您可以明确告诉主线程等到完成操作。
$a="place your input here";
$b=preg_replace('/\,/', ':', $a);
echo $a."<br/>";
echo $b;
或者如果这不起作用,您可以尝试在后台线程上运行它:
[self performSelectorOnMainThread:@selector(startActivityIndicatorMethod) withObject:nil waitUntilDone:YES];
答案 1 :(得分:0)
您需要将主队列用于与此相关的UI相关内容,并且上面的代码不会在Swift中执行此操作。在swift中,正确的方法是这样做:
dispatch_async(dispatch_get_main_queue()) {
//update UI
}
答案 2 :(得分:0)
好的,所以我用一个非常简单的基本解决方案解决了这个问题。
事件的原始序列是: 1)询问用户问题 2)启动活动指标 3)进行CPU密集型计算 4)显示结果。
其中一个建议是派遣异步来更新UI。这不起作用,因为UI仅在完成所有计算后才更新。 因此,为了解决问题,我将代码更改为:
1)询问用户问题 2)启动活动指标 3)调度异步执行CPU密集型计算 4)显示结果。
现在,UI正确显示活动指示器在第2点忙碌