从委托返回带有GCD的线程

时间:2014-05-02 09:48:16

标签: ios objective-c multithreading delegates

我们正在实施同步系统,其中某些操作以异步方式发送到SAP Mobile Platform服务器,当操作完成后,我们会收到来自专有SDK的委托调用。

此委托方法在随机线程上运行,而不是使用GCD。

我们希望发送操作 - 然后等待调用委托方法,这意味着操作已完成 - 然后在完成时恢复工作(或发生超时)。我知道这似乎是同步的,但是我们不能允许用户在操作尚未完成时修改数据以确保数据的完整性。

Sync ViewController正在进行一些繁重的同步工作,正在使用GCD,并在UI线程中更新进度条和一些文本。

现在,当调用委托方法时,我们想在Sync ViewController上调用另一个方法,但是这个调用显然是在错误的线程中完成的。

我的问题是如何在调用委托之前在GCD执行它们的同一个线程中执行这些方法。

我们尝试的事情:

  1. 只需调用方法。然后在错误的线程中调用这些方法,即委托方法所在的线程。
  2. 在选定的主题上发布通知,我们不知道Sync ViewController工作的确切主题。
  3. 有什么想法吗?

1 个答案:

答案 0 :(得分:3)

如果您已经在使用GCD,那么您必须知道此工作正在进行的调度队列,因此不仅仅是在上同步或异步调度块的情况队列?

- (void)someDelegateMethod:(id)someValue {
    dispatch_async(self.myDispatchQueue, ^{
        [self doInterestingThingWith:someValue];
    });
}