iOS线程调用

时间:2014-12-31 19:16:05

标签: ios multithreading dispatch-async

从主UIViewController我致电

  if (required) [dataDB function];
  next command;
  ....
  ....
数据库UIViewController

中的

- (void) Function {
  Display Alert Message for Processing;
  performs steps  (takes some time)
  ....
  ....
  Close Alert Message
}

虽然不应该阻止代码

我需要在调用下一个命令之前完成[dataDB Function];

然而,我需要警报在开始执行步骤之前开始显示。

当[dataDB Function]完成并在几乎立即关闭后显示当前警报。

请帮忙。

2 个答案:

答案 0 :(得分:1)

试试这段代码

if (required)
    {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [dataDB function];
            dispatch_async(dispatch_get_main_queue(), ^{
                next command;
            });
        });
    }

它将创建[dataDB function];的异步任务,在竞争之后,它将在next command;

的主队列上执行任务

答案 1 :(得分:0)

您希望使用GCD调度队列和完成块模式的某种组合。

您应该使用dispatch_async()对db函数进行排队,以便在后台队列(非并发队列)上进行串行完成,以便按照您发送它们的顺序执行它们。然后,您可以在等待后台队列上的操作完成时在主线程上显示警报。您可以使用传递给其中一个后台操作的完成块在完成时回调主线程,或使用dispatch_group_notify()功能。

你也可以考虑使用NSOperationQueue,但我发现只是调度块更容易。