gpt4 book ai didi

ios - 如何在当前队列中dispatch_after?

转载 作者:可可西里 更新时间:2023-11-01 03:11:36 26 4
gpt4 key购买 nike

既然 dispatch_get_current_queue 在 iOS 6 中被弃用了,我该如何使用 dispatch_after 来执行当前队列中的某些东西?

最佳答案

评论中的各种链接都没有说“最好不要这样做”。他们说你做不到。您必须传递所需的队列或分派(dispatch)到已知队列。调度队列没有“当前”的概念。 block 通常从一个队列馈送到另一个队列(称为“目标”)。当您实际运行时,“当前”队列并没有真正的意义,依赖它可能(并且历史上确实如此)导致死锁。 dispatch_get_current_queue() 从来都不是用来调度的;这是一种调试方法。这就是它被删除的原因(因为人们将其视为有意义的东西)。

如果您需要这种更高级别的簿记,请使用跟踪其原始队列的 NSOperationQueue(并且具有更简单的排队模型,使“原始队列”更有意义)。

UIKit 中使用了几种合适的方法:

  • 将回调 dispatch_queue 作为参数传递(这可能是新 API 中最常见的方法)。有关示例,请参见 [NSURLConnection setDelegateQueue:]addObserverForName:object:queue:usingBlock:。请注意,NSURLConnection 需要一个 NSOperationQueue,而不是一个 dispatch_queue。更高级别的 API 等等。
  • 回调您所在的任何队列并将其留给接收者处理。这就是回调的传统工作方式。
  • 要求在调用线程上有一个运行循环,并在调用运行循环上安排回调。这就是 NSURLConnection 在队列出现之前的历史工作方式。
  • 除非另有说明,否则始终在众所周知的队列之一(尤其是主队列)上进行回调。我不知道这在 UIKit 中的任何地方完成,但我在应用程序代码中经常看到它,并且在大多数情况下是一种非常简单的方法。

关于ios - 如何在当前队列中dispatch_after?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839812/

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