问题标签 [dispatch-queue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
58 浏览

swift - 调度队列异步调用

我正在另一个网络请求中的 for 循环内触发网络请求。我正在使用核心数据,但我相当确定这不是核心数据问题,而是异步问题。

Firebase 请求中的 2 个打印语句正确打印数据,但没有 DispatchQueue 数组返回为空(在网络请求完成之前)。

这是崩溃的图片: 碰撞

这是代码本身:

任何帮助都会大有帮助

0 投票
1 回答
225 浏览

swift - 如何在 Swift 中测量 DispatchQueue 并发异步中的代码块执行时间?

假设我有这种功能和 DispatchQueue 逻辑。假设当synchLatest()被调用时它会触发"Code Block 1"两次。

应该怎么"Code Block 1"做?1.7 seconds5 seconds

我是否以错误的方式在这里测量代码执行时间?

0 投票
1 回答
1900 浏览

ios - iOS 应用程序因 EXC_BREAKPOINT (SIGTRAP) 而崩溃

我有一个在启动时崩溃的应用程序。我已经确定了问题的根源,但我似乎无法弄清楚如何解决它。让我先解释一下我的工作:

我有一个 LocationManager 来检查用户是否进入某个区域(使用 startRegionMonitoring)。如果是这样,则计划在 5 分钟内触发本地通知。但是,如果此人在 5 分钟内再次离开,则本地通知将被取消。我这样做是因为用户可以通过建筑物而无需实际进入它。当用户自己打开应用程序时,它还会取消任何待处理的通知(在这 5 分钟内)。

发生这种情况时,应用程序会在启动时崩溃。崩溃报告表明了这一点:

起初,我没有在主线程上执行取消操作——我认为这是导致崩溃的原因。所以我使用了 Dispatch Queue 并认为问题会得到解决,但它仍然存在。我的代码willEnterForeground

我不确定如何解决这个问题。知道这个提醒是从后台发送的可能很重要,所以当应用程序不在前台时。我在后台打开了定位服务,当我留在该位置时一切正常,但是当我在这 5 分钟内再次退出时出现问题,因此需要取消通知。

有任何想法吗?

0 投票
2 回答
355 浏览

ios - Firebase 查询未按正确顺序执行?

我获取数据并在 tableView 中显示,问题是数据没有按正确的顺序执行。

我努力了:

但它也不起作用,第二个 firebase 调用的执行顺序不正确。

0 投票
1 回答
699 浏览

swift - 有没有一种特定的方法可以将 DispatchWorkItems 附加到 DispatchQueue 而不是在代码中重新声明它们?

我有几个 Dispatch 工作项要在队列上执行,我不想重新声明代码,我想将它们传递给数组或列表,DispatchWorkItems然后将其注入调度队列有没有办法实现这一点?

/// 我是如何实现这样的目标的

// 这可能吗 ?

0 投票
1 回答
992 浏览

swift - 在继续下一个请求或调度队列中的下一个 DispatchWorkItem 之前,我如何等待接收来自 DispatchWorkItem 的响应

我有一组调度工作项,如何等到一个工作完成后再继续队列中的下一个工作?

我如何简化上述方法或如何应用semaphores或任何其他可接受的方法来帮助我等到我得到 a 的响应,DispatchworkItem然后再继续执行DispatchworkItem队列中的下一个

从服务器获取数据的模型视图如下所示

0 投票
3 回答
2537 浏览

ios - 完成处理程序调用两次(带线程)

我目前正在 Xcode 10 Playground (Swift 5) 中测试这段代码:

问题是“hi”和“nil”都被打印出来了。

如果我摆脱线程,它可以正常工作,但它似乎DispatchQueue.main.async在第一个有机会返回之前到达第二个。

在我的实际代码中的“一些缓慢的东西”中还有很多东西在发生,if但我不能依赖在调用第二次返回之前花费足够长的时间来返回。

我该如何做到这一点:让函数在后台线程中运行,但在主线程上只返回一次(就像通常没有线程的代码一样)?

0 投票
1 回答
121 浏览

swift - 使用“自我”的更好方式。在后台线程中?

添加DispatchQueue.global(qos: .background).async {}到我的代码(Xcode 10、Swift 5)的单个函数后,滚动条如下所示:

在此处输入图像描述

这些是对需要“自我”的 var 和其他函数的 40 多个调用。

解决这个问题并不难(编辑器 > 修复所有问题),但它会大大降低可读性。

我知道可以创建这些变量的新副本/引用并使用它们而不是外部的,但是会有很多新的副本/引用。

是否有第三种方法可以解决此问题,有助于提高可读性但不会更改初始代码(太多)?

0 投票
1 回答
309 浏览

ios - 多线程 - Swift 中的 DispatchQueue asyncAfter 延迟

我正在使用以下代码每秒定期调用一个函数。问题是延迟实际上是 1.1 秒,并且最终会越来越漂移,这可以在 NSLogs 中看到(并且它在代码的其他部分以及除了 NSLog 之外的其他部分中也可见)。我做错了吗,还是应该使用计时器?

0 投票
1 回答
262 浏览

ios - 无法在 dispatchqueue 中手动控制 performSegue()

我有一个按钮对象,它运行一个用于计算的后台线程和一个用于 UI 更新的主线程。毕竟完成后,我想使用 移动到另一个视图控制器performSegue(withIdentifier: "thirdViewController", sender: self),但它在dispatchQueue. 我之前用过performSegue()很多次在视图控制器之间切换,我总是可以手动控制它。相反,它几乎立即移动到下一个 ViewController,而无需先完成计算。

我尝试使用self.present(thirdViewController(), animated: true, completion: nil), 并self.navigationController?.pushViewController(thirdViewController(), animated: true)更改 ViewController 但他们只是给了我一个黑屏。