问题标签 [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 回答
421 浏览

ios - 串行队列同步方法中断 Main 上的 UIView 动画

我遇到了一个问题,我在 main 上运行的进度条动画被对我的串行队列的同步调用打断了。

以前我没有将此队列用作串行队列,而仅用作异步队列 - 但是这会导致在处理进入后台/前台转换时出现问题,我不得不将队列视为同步并仅调用同步而不是异步.

现在,队列保持我的应用程序完美运行——除了 UIView 动画现在卡顿(有时超过一秒钟),这取决于对我的串行队列的每个同步调用的负载。

无论如何,是否允许同步调用我的串行队列而不会在我的 UIView 动画中导致这些口吃?我已经尝试将每个同步块中的新动画动态调用到我的串行队列中,但这并不能解决问题。

0 投票
1 回答
222 浏览

ios - 在运行 DispatchSourceTimer 时调用 scheduleRepeating() 的行为?

我有一个运行DispatchSourceTimer创建的:

当我打电话时会发生什么:

晚些时候?它是否会重置计时器并使其再次开始“计数毫秒”?

iOS 文档什么也没解释。

0 投票
1 回答
108 浏览

ios - 如何在后台加载联系人图像?

我正在使用通讯录开发应用程序。我正在显示来自 API 的通话记录,当我显示历史数据时,我会检查联系人是否在通讯录中可用。如果可用,则显示联系人姓名和图像。我在后台执行此过程,但有时,tableview 卡住并且没有给出任何响应。我正在使用以下代码来执行上述过程:

在后台队列中,我检查了联系人是否可用。

我需要在后台进行联系人搜索,并在后台设置数据并在主线程上调用 API。

如果有人对上述问题有解决方案,请帮助我。

谢谢你。

0 投票
3 回答
11971 浏览

swift - 如何快速停止 dispatchQueue

我有一个用于 introViewController 的 DispatchQueue,它显示一个 gif 11 秒,然后显示我的登录页面......但也有一个按钮可以跳过介绍并显示登录。当我单击它时,时间仍在运行,当我在应用程序中导航时,时间结束时会返回登录。

这是我的课

单击按钮时如何停止时间?

0 投票
2 回答
509 浏览

ios - 以下是 dispatch_set_target_queue() 的安全使用吗?

我想要做的是创建一个针对主队列的间接队列。

我的最终目标是使用队列作为NSOperationQueue的基础队列属性,因为 Apple 的文档明确声明不要使用 dispatch_get_main_queue()。尽管使用间接队列,但它在技术上遵循文档。

这一切的原因是因为NSOperationQueue.mainQueue 对于异步操作不是安全的,因为它是全局可访问的,并且它的maxConcurrentOperationCount 设置为 1。所以可以很容易地用这个操作队列来打自己的脚。

更新 1

关于这个问题假设“异步 NSOperation”是什么的基础,似乎有很多困惑。需要明确的是,这是基于此WWDC 会话中的概念。特定概念是使用“操作就绪”和依赖管理来管理应用程序中的任务,这意味着将异步 NSOperations 添加到 NSOperationQueues 以利用这一点。如果您将这些概念与这个问题的精神相结合,希望推理会更有意义,并且您可以专注于将解决方案与其他解决方案进行比较和对比。

更新 2 - 问题示例:

更新 3 - 示例 2:

我没有展示 MyAsyncBlockOperation 的实现,但您可以将其用作它在 Swift 中的基础

所以我想,为什么不用另一个 NSOperationQueue 呢?一个将其底层队列设置为前面提到的间接GCD 队列仍然遵循文档)。所以我们可以有一个并发的 NSOperationQueue,合法地针对串行主GCD 队列,并最终确保操作在主线程上运行。

如果您需要澄清,请告诉我,这是完整代码的示例:

现在......有一个安全的操作队列,用于需要在主线程上运行的异步操作,并且没有任何不必要的上下文切换

安全吗?

0 投票
4 回答
1835 浏览

ios - 在 DispatchQueue.main.async 中完成某些处理时,更新 UI 控件会出现延迟

尝试从 DispatchQueue.main.async 闭包更新 UI 控件,该闭包执行一些处理并需要几百毫秒或更长时间,UI 标签的更新会有几秒到几秒的延迟。如果没有延迟或延迟很短,则 UI 中的标签会随着代码的运行而更新,并且似乎是瞬时的。

我有这个小例子来说明我添加了一个“毫秒等待”函数来模拟处理时间并显示发生的 UI 更新滞后的问题。

在示例中,waitForMilliSecs 设置为 300 或更少,标签会立即更新。任何大于 300 的数字,都会出现更新标签几秒到几秒的延迟。日志消息表明代码已经运行,理想情况下应该在打印出来时更新 UI。

真正的用例是我正在抓取 HTML 页面的数据,然后使用页面的一些内容更新 UI。完成处理程序是从后台线程上的 URLSession.shared.dataTask 调用的,因此 DispatchQueue.main.async 闭包用于更新主线程上的 UI。

有没有更好的方法来更新 UI?有没有办法强制更新主线程上的事件?

0 投票
1 回答
3249 浏览

ios - 几秒钟后如何停止计时器

这里在myAPICall()方法中调用另一个方法,即COStatusAPI()每 5 秒最多 90 秒。

COStatusAPI()是一个 API 调用。即,我每 5 秒访问一次服务器。作为回应,我将COStatus 设为 1 或 0

如果我将COStatus 设为 1,我将停止计时器并导航到另一个 viewController ,如果我将 COStatus 设为 0 90 秒。我正在停止计时器并显示警报。

但在这里我的问题是计时器没有停止。比如,如果我将COStatus 设为 1,则后台计时器正在运行。因此,在 90 秒后收到警报消息。

以同样的方式直到 90 秒。如果我将COStatus 设为 0,则表示正在显示警报。此警报继续重复。

如何做到这一点?谁能帮我解决这个问题

}

0 投票
2 回答
948 浏览

ios - dispatchqueue 在 Swift 4 中异步使用以加速

我有一个使用 Swift 1.2 开发的旧 iOS 应用程序。在那个使用调度队列来加速运行时。

在 Swift 4 中,我尝试过如下更改

我做对了还是需要修改?

0 投票
1 回答
134 浏览

swift - 调度队列 Swift 出错

我正在尝试创建一种遗传算法,用于在赛道上运行赛车。每辆汽车都会收到随机指令,这些指令会向汽车施加力并将汽车旋转一定的度数。为了将分配给每辆车的新指令间隔开,我在调度队列中使用了一个延迟时间,它在前一条指令的基础上增加了 0.2 秒。例如

0 秒 - 第一条指令
0.2 秒 - 第二条指令
0.4 秒 - 第三条指令

等等...

我遇到的问题是,在执行了几条指令后,我开始注意到指令之间的延迟更长,以至于在 2 秒后应用了一条新指令。

下面是我的代码。

二维数组 newCar 是所有指令的列表。

任何帮助将不胜感激,因为我多年来一直试图解决这个问题!

非常感谢提前,任何问题都可以随时提出!

0 投票
1 回答
768 浏览

swift - 如何在 SpriteKit 中的循环中进行延迟?

我在这里和那里进行了一些搜索,但我没有找到(或理解)如何在 SpriteKit 中的循环中进行延迟。

这就是想法:我有一些 SKSpriteNodes 排序在一个数组中,我想在屏幕上显示它们,每秒一个。问题是......我根本无法做到(对不起,我对此很陌生)。

如果你问:这根本不起作用。似乎没有读取 DispatchQueue.main.asyncAfter 中的内容。

所以,如果你能帮助我理解为什么,那就太好了。我不挑剔,我不能用“for”循环来回答。

问候,