活动指示器显着减慢功能

时间:2013-08-14 18:58:30

标签: iphone ios uiactivityindicatorview

还有其他人有这个问题吗?我有一个功能,根据情况需要时间,有时执行速度非常快。当显示新的视图控制器时调用此函数,以便让用户看到函数正在执行我正在使用dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{在新线程中执行该函数,同时显示新的视图控制器和活动指标。

它按照我的预期工作,但在某些情况下,当该功能几乎立即执行时,它仍然需要将近3秒。在活动指示器消失并显示内容之前。似乎永远不会介意它总是花费相同的时间(3秒),但是当我在主线程中执行它时,只需要很长时间才能执行它。

1 个答案:

答案 0 :(得分:4)

正如omz指出的那样,大多数UIKit类都不是线程安全的,任何涉及UI的东西都应该发生在主线程上。在显示活动指示符时在另一个队列上执行任意长时间运行的事情的正确方法如下所示:

[self showProgressUIOrWhatever];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self doSomeWork];

    dispatch_async(dispatch_get_main_queue(), ^{
        [self hideProgressUIOrWhatever];
    });
});