活动指示器未显示CPU密集型任务

时间:2015-10-29 13:13:47

标签: ios swift

我有一个可能偶尔执行大量CPU处理的应用程序。 事件的顺序是:

1)向用户询问一些问题 2)启动活动指标 3)做CPU密集型的东西 4)显示结果

但是,当我运行此操作时,活动指示器不会在步骤2显示,而是仅在步骤4显示。我相信这是因为操作系统未更新UI。 关于如何解决这个问题的任何想法?

3 个答案:

答案 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点忙碌