0

有没有其他人有这个问题?我有一个功能,根据情况需要时间,有时执行速度非常快。当显示新的 View Controller 时调用此函数,以便让用户看到该函数正在执行,我正在使用dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{在新线程中执行该函数并同时显示新的 View Controller 和 Activity Indicator。

它按我的预期工作,但在某些情况下,当该函数几乎应该立即执行时,它仍然需要将近 3 秒。在活动指示器消失并显示内容之前。似乎没关系它总是需要相同的时间(3秒),但是当我在主线程中执行它时,只有有限的时间需要这么长时间。

4

1 回答 1

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];
    });
});
于 2013-08-14T19:15:16.380 回答