gpt4 book ai didi

swift - NSOperationQueues 在被释放之前总是完成它们的队列吗?

转载 作者:行者123 更新时间:2023-11-30 12:53:05 27 4
gpt4 key购买 nike

我的任务是清理项目中一些现有的 Swift 代码,这些代码刚刚转换为 Swift 3。但是,我不断看到这个对我来说看起来很可疑的代码。

OperationQueue().addOperation(someOperation)

这是我的疑虑/问题...

  • 队列实例就在那里创建和使用。不会存储对它的引用以供其他地方使用。
  • 由于上述原因,队列中只会有一个操作,那么为什么要使用队列呢?
  • 由于没有人持有对队列的引用,在 ARC 下,它不应该被立即释放吗?如果是这样,现在正在执行的操作本身会发生什么?它会被中断、中止还是仍然完成?
不管怎样,我想知道我是否遗漏了一些东西,或者不知道 NSOperationQueue 和 NSOperations 的“功能”使这段代码有意义。任何人都可以阐明这一点,或者您是否同意这是不好的做法?

最佳答案

我也见过这种模式。我认为它的工作原理类似于 NSURLConnection:NSOperationQueue “知道”它有一个待处理的操作,并且不允许自己立即消失。另请记住,NSOperationQueue 并不是真正的“事物”;它只是一个“东西”。它是底层调度队列的一种前端。

在没有合理位置存储队列引用的情况下,使用此模式是有意义的。您可以使用它来发挥强大的效果,如this example其中操作具有依赖项,因此在所有依赖项都存在之前不会执行。

但是,就我个人而言,如果我不利用此类 NSOperation 功能,我会更倾向于直接使用 GCD。

(至于你的中间点,在主线程上执行是没有意义的,因为如果操作很长怎么办?你会阻塞主线程。但是,请注意,如果你正在尝试说的是“在其他所有事情之后执行此操作”,Swift 会为您提供 defer。)

关于swift - NSOperationQueues 在被释放之前总是完成它们的队列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40729974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com