1

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

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

第一个方法调用其他方法,并在此过程中调用其他创建单独threads 的东西,所以这是问题所在吗?发生这种情况时,它认为操作完成了吗?是不是NSOperation太复杂了?有没有更简单的方法可以说“做这个,直到完成”?

4

1 回答 1

3

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

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

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

于 2013-08-28T19:46:02.607 回答