处理NSOperation completionBlock在不同线程上调用这一事实的最佳方法是什么?

时间:2013-11-05 11:55:54

标签: objective-c grand-central-dispatch nsoperation

假设我们有NSOperation A和NSOperation B. B依赖于A完成并执行一些设置,因为A.completionBlock被调用并完成。这意味着B.addDependency(A)无法使用,因为在A完成之前无法构造B.因此,在构建和启动B之前,我们选择在单独的线程上使用A.waitUntilFinished()

但是,因为A的completionBlock是在另一个线程上调用的,所以我们称之为A.waitUntilFinished()的线程在 A.completionBlock之前解锁 执行并因此建造B必要的先决条件尚未完成。

因为苹果NSOperation API无法控制调度A.completionBlock的位置,处理此问题的常用方法是什么?

修改

到目前为止,我尝试过的选项是将NSOperation B包装在NSBlockOperation C中,然后调用C.addDependency(A),以便在A完成之前不构造B。但是,这仍然无法解决问题,因为仍必须在NSBlockOperation C中调用异步启动,并且完成块仍然会飞到另一个线程。

1 个答案:

答案 0 :(得分:0)

因为你想要发生的是模型2的uuid已知的模型2保存,你能用这些术语表达它,并让模型2观察模型1的uuid(或使用通知)并在设置值后启动操作B?