有一些相关的主题,但我所做的所有搜索都没有涵盖我想要做的事情。
我有一个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添加到队列中,然后在返回结果之前等待它完成。
任何想法或建议都会受到高度赞赏,因为似乎有很多相互矛盾的建议如何做到这一点,而且我找不到任何有效的方法。
答案 0 :(得分:0)
您的API指定其同步模式是好的,并且在与调用者不同的线程中调度,这似乎很奇怪。
至少你的问题是如何指定的。
使用相对简单的NSOperation / NSOperationQueue系统可能无法做到你想要的。您是否查看了GCD,例如dispatch_once?
基本上,你不能说(在伪代码中)
var myval = start_thread_and_do_stuff(a, b, c)
委托方法方法旨在通过线程传递内容。由于该示例中的myval分配将在不同的上下文中进行,因此分配是不可能的。
我是否以错误的方式阅读了您的问题?方法调用发生在哪个线程中?背景或主线?