ios - 从委托(delegate)返回具有 GCD 的线程

标签 ios objective-c multithreading delegates

我们正在实现一个同步系统,其中一些操作会异步发送到 SAP Mobile Platform 服务器,当操作完成时,我们会收到来自专有 SDK 的委托(delegate)调用。

此委托(delegate)方法在随机线程上运行,不使用 GCD。

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

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

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

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

我们尝试过的事情:

  1. 只是调用方法。那么这些方法就会在错误的线程中调用,即委托(delegate)方法所在的线程。
  2. 在所选线程上发布通知时,我们不知道 Sync ViewController 正在运行的确切线程。

有什么想法吗?

最佳答案

如果您已经在使用 GCD,那么您必须知道正在执行此工作的调度队列,所以这不就是在该队列上同步或异步调度 block 的情况吗 队列?

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

关于ios - 从委托(delegate)返回具有 GCD 的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23425211/

相关文章:

ios - 通用应用程序以纵向模式启动,即使它仅限于横向

objective-c - 这真是聪明吗 [__persistentStoreCoordinator 版本], __persistentStoreCoordinator = nil;

java - java 线程化 - 两个同时工作池

iphone - 禁用 tableHeaderView(不要与节标题混淆)滚动

ios - Swift:按钮圆角打破约束

javascript - 我如何让声明 "for"在 javascript 中等待

objective-c - MonoTouch 绑定(bind)到 ObjectiveC 库不起作用

objective-c - NSFileManager setUbiquitous:是,我的文件陷入了困境!为什么?

ios - 带循环的事件指示器

c++ - Eclipse C++11 线程支持不起作用