iOS - 操作队列

时间:2014-06-03 15:00:18

标签: ios cocoa-touch

有一些相关的主题,但我所做的所有搜索都没有涵盖我想要做的事情。

我有一个API有两种操作模式,Sync和Async。

在同步模式下,对API的调用必须在后台线程上,并且数据会返回给调用者,并且线程可能会被阻塞,直到操作完成。

在异步模式下,对API的调用可能在后台线程或主线程上,委托被传递给API方法,该方法立即返回,并在操作完成或失败时调用Delegate。

这一切都有效,但我有一些现有的代码,我希望拥有相同的API,并由Manager Class调用,根据上下文调用正确的底层API,例如。

AppLayer调用调用API_A的Manager类}这些API具有相同的方法定义。

AppLayer调用调用API_B的管理器类}

API_A是支持Sync / Async接口的现有API。 API_B是我想要创建的。


问题是现有代码使用NSOperationQueue / NSOperation完成它的任务,这在异步模式下工作正常。很容易让它适应调用Delegate方法,但我不确定如何实现同步模式?

基本上我想将NSOperation添加到队列中,然后在返回结果之前等待它完成。

任何想法或建议都会受到高度赞赏,因为似乎有很多相互矛盾的建议如何做到这一点,而且我找不到任何有效的方法。

1 个答案:

答案 0 :(得分:0)

您的API指定其同步模式是好的,并且在与调用者不同的线程中调度,这似乎很奇怪。

至少你的问题是如何指定的。

使用相对简单的NSOperation / NSOperationQueue系统可能无法做到你想要的。您是否查看了GCD,例如dispatch_once?

基本上,你不能说(在伪代码中)

var myval = start_thread_and_do_stuff(a, b, c)

委托方法方法旨在通过线程传递内容。由于该示例中的myval分配将在不同的上下文中进行,因此分配是不可能的。

我是否以错误的方式阅读了您的问题?方法调用发生在哪个线程中?背景或主线?

相关问题