我正在努力实施手动刷新。刷新过程有3个步骤。每个都需要在另一个之前完成(同步,串行等)。所有这些都需要在后台完成,以免阻止UI。
我已经分别测试了3种方法,他们都做了他们应该做的事情(从服务器获取数据,更新数据库等)但是当我取消注释所有内容并运行时,第二种方法在第一次完成之前就开始了。我无法弄清楚如何解决这个问题。我为3种方法尝试了NSInvocationOperation
并设置了dependencies
。没工作。试过queue.maxConcurrentOperationCount = 1
。没工作。
第一种方法调用其他方法,并在整个过程中调用其他创建单独thread
的东西,问题就是这样吗?当发生这种情况时,是否认为操作已完成? NSOperation
太复杂了吗?是否有一种更简单的方式可以说"做到这一点,不要这样做直到完成"?
答案 0 :(得分:3)
使用NSOperationQueue
和多个NSOperation
实例,并指定它们之间的依赖关系是正确的方法。
如果操作创建其他线程并且不等待它们完成那么这将是一个问题,因为操作将完成并且下一个操作将开始运行。
异步运行的操作应该在NSOperation
子类中执行。此子类需要从isConcurrent
返回YES以在start / main方法返回后保持操作处于活动状态。当isFinished
更改为YES时,操作完成(使用KVO进行观察,因此必须发送更改通知)。因此,异步过程需要在完成后更新并发布相应的通知。这将终止操作并允许下一个操作开始。