刷新过程应在后台运行,但子处理需要同步

时间:2013-08-28 19:38:23

标签: iphone objective-c multithreading concurrency

我正在努力实施手动刷新。刷新过程有3个步骤。每个都需要在另一个之前完成(同步,串行等)。所有这些都需要在后台完成,以免阻止UI。

我已经分别测试了3种方法,他们都做了他们应该做的事情(从服务器获取数据,更新数据库等)但是当我取消注释所有内容并运行时,第二种方法在第一次完成之前就开始了。我无法弄清楚如何解决这个问题。我为3种方法尝试了NSInvocationOperation并设置了dependencies。没工作。试过queue.maxConcurrentOperationCount = 1。没工作。

第一种方法调用其他方法,并在整个过程中调用其他创建单独thread的东西,问题就是这样吗?当发生这种情况时,是否认为操作已完成? NSOperation太复杂了吗?是否有一种更简单的方式可以说"做到这一点,不要这样做直到完成"?

1 个答案:

答案 0 :(得分:3)

使用NSOperationQueue和多个NSOperation实例,并指定它们之间的依赖关系是正确的方法。

如果操作创建其他线程并且不等待它们完成那么这将是一个问题,因为操作将完成并且下一个操作将开始运行。

异步运行的操作应该在NSOperation子类中执行。此子类需要从isConcurrent返回YES以在start / main方法返回后保持操作处于活动状态。当isFinished更改为YES时,操作完成(使用KVO进行观察,因此必须发送更改通知)。因此,异步过程需要在完成后更新并发布相应的通知。这将终止操作并允许下一个操作开始。