问题标签 [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 投票
2 回答
926 浏览

ios - 为什么同步代码块总是在主线程上调用?

我用 DispatchQueue 做了简单的测试:

它打印出来:

为什么这段代码在主线程上执行?它应该在后台线程上执行(它被添加到后台队列中),对吧?

0 投票
1 回答
218 浏览

swift - 创建执行动画的等待队列

我目前正在制作一个快速动画。此动画由另一个函数在不稳定的时间间隔内触发(连接到服务器)。动画需要 2 秒才能完成,但它可能在完成之前被触发。这就是为什么我正在考虑创建一个等待队列来存储触发事件,直到动画完成并且可以重新启动。所以一方面我必须锁定动画功能,直到它再次准备好,另一方面我需要某种存储来存储传入的事件。我已经在考虑调度组,但不知道如何使用它们。对于我可以解决这个问题的方向的任何意见,我都会非常高兴。

触发功能:

0 投票
1 回答
76 浏览

ios - NSManagedObject 在指定队列上使用

我有一个在后台队列上运行的后台任务。我需要在这个任务中加载一些 NSManagedObjects。我知道我需要使用私有上下文,但是如何将此上下文绑定到我现有的后台队列,以便我可以在后台任务中使用这个 NSManagedObjects?我应该在这个后台任务中执行,performBlock或者performBlockAndWait我应该只从performBlock私有的 UI 线程调用NSManagedObjectContext并使用这个上下文中的队列来执行任何后台任务,包括加载保存 NSManagedObjects 和其他后台任务,如与 rest-api 通信等......

我只是不确定是否可以使用上下文中的此队列来执行与 CoreData 无关的任何其他任务NSManagedObjects?如果不是如何使用NSManagedObjects我为我的任务创建的队列中的那些?

0 投票
1 回答
583 浏览

swift - 如果我将 Dispatch.main.async 块放入 Dispatch.global.async 会发生什么?

我有一个案例,我在后台线程中的 Dispatch.global 中将数据保存到 Realm 数据库,然后在同一个线程中我调用 Dispatch.main.async 从 Realm 获取数据并更新 UITableView 数据。

问题是我得到的数据数量减少了(data.count)。假设总数据数为 10,那么有时我有时会得到所有数据,有时会少于 10。

为什么会这样?

以下是示例代码片段

在上面的代码中 removeDataFromRealm()、saveDataToRealm(data)、getDataFromRealm() 是领域类静态函数,我在其中保存、删除、从领域数据库中获取数据

我已经从我理解的所有方面调试了代码,它保存(saveDataToRealm(data))所有数据,然后获取(getDataFromRealm())数据,根据我的理解,为什么它有时会向我发送更少的数据

在获取数据时,RealmManager getDataFromRealm() 静态方法没有应用过滤器。

假设上面的代码进入竞争状态,那么下面的代码片段会发生什么

由于 getImageFromServer() 首先获取数据,然后 Dispatch.main.async 在将“Data(contentsOf: url)”转换为显然需要时间的数据后执行。

为什么在上述情况下它的工作方式不同?

0 投票
1 回答
37 浏览

ios - 用于加载 UIImages 产生意外结果的调度

我正在构建一个应用程序,该应用程序具有多个图像(计划),这些图像(计划)在带有页面内容的滚动视图上加载和设置。我正在尝试在主线程上加载第一张图像,然后从后台线程的索引中加载周围的图像。当我需要使用加载的数据设置它们的图像时,所有 UIImageViews 都在一个数组 (planImages) 中以供参考。

问题是图像并不总是使用最近加载的图像进行更新。这是我第一次使用 Dispatch,所以我做错了什么吗?这是给我问题的代码部分。

0 投票
1 回答
25 浏览

ios - Will a Serial DispatchQueue wait if a task spawns a different thread

Serial dispatch queues will execute their tasks one at a time. But what if I have task1 and task2 in the queue. task1 one starts execution and calls a function with a completion block (which I assume will use a different thread to execute). At this point, I believe task1 will exit, even though the completion block has not yet been called. Is it a possibility that task2 will start executing before the completion block from task 1 is executed?

0 投票
3 回答
1426 浏览

ios - 在指定时间段内运行和暂停 ARSession

我正在开发带有手势识别的ARKit/ VisioniOS 应用程序。我的应用程序有一个简单的 UI,其中包含单个UIView. 根本没有ARSCNView/ ARSKView。我将一系列捕获的内容ARFrames放入CVPixelBuffer然后用于VNRecognizedObjectObservation.

我不需要会话中的任何跟踪数据。我只currentFrame.capturedImage需要CVPixelBuffer. 而且我需要以 30 fps 的速度捕获 ARFrame。60 fps 是过高的帧速率。

preferredFramesPerSecond在我的情况下,实例属性绝对没用,因为它控制渲染ARSCNView/的帧速率ARSKView。我没有 ARViews。而且它不会影响会话的帧速率。

因此,我决定使用run()pause()方法来降低会话的帧速率。

问题

我想知道如何在指定的时间段内自动run和一个ARSession?和方法pause的持续时间必须是(或 0.016 秒)。我想可能通过. 但我不知道如何实现它。runpause16 msDispatchQueue

怎么做?

在此处输入图像描述

这是一个伪代码:

PS我的应用程序中既不能使用 CocoaPod 也不能使用 Carthage

更新:关于如何currentFrame.capturedImage检索和使用 ARSession。

0 投票
5 回答
1677 浏览

ios - 如何回到 Xcode 中的主线程?

我正在使用我的 SignUpViewController 创建一个帐户,当用户使用不符合密码规范的密码注册帐户时,程序应该发出警报。相反,出于某种原因,我不断得到:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished] 只能从主线程调用。”

我怎样才能回到主线程,以便程序只会发出警报?

这是该视图控制器的代码:

0 投票
2 回答
100 浏览

ios - iOS (Swift):使用 DispatchQueue.main.asyncAfter 制作充满活力的按钮 Flash

我试图UIButton通过调用以下flash()给出的方法来点亮一堆充满活力的子类实例:

使用此功能,我可以循环遍历一组按钮,触发持续 0.1 秒的闪烁效果,闪烁是由活力层改变其flashView后面的实例引起的。

DispatchQueue.main.asyncAfter通过在调用中调用此函数是否有任何缺点DispatchQueue.main.asyncAfter

0 投票
2 回答
451 浏览

swift - Swift - 带有条件的 GCD 计时器

我使用 Firebase 上传带有进度指示器的文件:

我想实现一个条件:如果 % 的值(例如:23%)被卡住 15 秒或更长时间,它会取消上传。

我在想一个 GCD 定时器:

但我不知道如何链接 15 秒内未更新的 a 值的条件。任何想法 ?

非常感谢,