NSOperationQueues在被解除分配之前是否总是完成队列?

时间:2016-11-21 21:45:56

标签: swift nsoperationqueue

我已经完成了清理我们刚刚转换为Swift 3项目的现有Swift代码的任务。但是,我一直看到这看起来对我很怀疑。

OperationQueue().addOperation(someOperation)

以下是我所关注的问题......

  • 在那里创建并使用队列实例。不存在对其的引用以供在其他地方使用。
  • 由于上述原因,队列中只会有一个操作,为什么要使用队列?
  • 由于没有人持有对队列的引用,在ARC下,不应该立即解除分配,如果是,那么现在执行的操作本身会发生什么?是中断,中止还是完成?

无论如何,我想知道我是否遗漏了某些东西,或者我不知道某个功能' NSOperationQueue和NSOperations让这段代码变得有意义。谁能说清楚这一点,还是你认为这是不好的做法?

1 个答案:

答案 0 :(得分:0)

我也见过这种模式。我认为它像NSURLConnection一样:NSOperationQueue"知道"它有一个待处理的操作,并且不允许它自己立即失效。还要记住,NSOperationQueue并不是真正的东西&#34 ;;它是底层调度队列的一种前沿。

在没有合理位置存储对队列的引用的情况下使用此模式是有道理的。并且你可以使用它来产生强大的效果,就像在操作具有依赖关系的this example中一样,因此直到所有依赖关系才会执行。

然而,就个人而言,如果我没有利用那种NSOperation功能,我更倾向于直接使用GCD。

(至于你的中间点,在主线程上执行是没有意义的,因为如果操作很长会怎么样?你会阻塞主线程。但是,请注意,如果所有你&# 39;重新试着说"在其他所有事情之后做这件事",Swift给你 let button = (sender as AnyObject) button.setTitle("Your text", for: .normal) 。)