问题标签 [ios-multithreading]

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 回答
595 浏览

ios - didFinishPickingMediaWithInfo 是否在后台线程中被调用?

我认为UIImagePickerController委托方法(或任何UIKit委托方法)在主线程中被调用。但是在这里,当从画廊或相机中选择图像时,该didFinishPickingMediaWithInfo方法似乎没有被调用,并且 UIKit 委托方法必须在主线程上调用对吗?显式调度到主线程有效。Apple 文档中也没有提及这一点。

底线,所有 UIKit 委托方法都在主线程上调用吗?或者有些在非主线程中被调用?为什么我们认为没有必要将我们的代码分派到主线程,但最终这样做会使事情发生这种不一致?如果有人知道答案,请澄清。

编辑: 正如 Rob 所建议的,我用这个方法检查[NSThread isMainThread]了代码在哪个线程中执行。它清楚地返回true确认我在主线程中,但奇怪的是没有setImage明确地将我的方法分派到主队列,代码不起作用。此外,我尝试将我的代码移动到选择器dismiss方法的完成处理程序,瞧,它可以在没有显式主线程块的情况下工作!

仍然对为什么会这样表现感到困惑......

0 投票
1 回答
61 浏览

java - 使用更多线程在 Java 中读取同一个文件

如何使用多线程在 Java 中读取文件?如果它比使用一次慢也没关系,我必须这样做。因此,例如,如果有 2 个线程,第一个读取第一行,同时第二个读取第二行;然后第一个读取第三行,第二个读取第四行,他们从文件末尾继续以这种方式读取。如何在 Java 中实现这一点?

0 投票
0 回答
60 浏览

nsrunloop - performSelector 队列和运行循环调度

我已经阅读了苹果关于如何使用 NSOperation 的代码示例 ListAdder 技术说明 TN2109还解释了细节。

如果已经有一个 Operation 计算,并且用户通过从 tableview 中删除一个单元格来删除数据,那么 tableview 委托方法将被调用并触发新的 Operation 重新计算。我画了一张图来说明这一点:

图表显示了调用顺序

问题:

1.M1,M2,M3 总是在一个循环中处理?

adderOperationDone2.函数被发送到主线程以通过函数执行,我知道选择器将被添加到mainRunloopperformSelectorOnMainThread的队列中,但是何时执行排队?

3. 有没有在和M4之间插入的情况?M2M3

0 投票
2 回答
169 浏览

ios - 为什么在主队列更新 UI 后私有队列调度 _async 更新 UI?

使用后台线程更新 UI 的理想方式是

但是即使不使用主队列,我们​​也可以更新 UI

所以我使用 beizer 路径来绘制一些点,这些点来自 iPad UIPanGestureRecognizer。现在我在主线程上绘制这些点并旋转这些点以获得新点并使用后台线程(并发)绘制这些新点。这是我的代码:

我的问题是:主线程和私有队列应该同时在 UI 上绘制。为什么释放手势后,privateQueue 在 UI 上绘制点?

0 投票
0 回答
306 浏览

ios - 在主线程上检索 HealthKit 数据导致随机用户的应用程序崩溃 - iOS - Swift

我在我的应用程序上使用 HealthKit 来读取用户的健康数据并将数据显示在我的应用程序的适当位置。对于一些生产用户(主要影响是对iPhone X用户),它在使用 HealthKit(在主线程上)检索健康数据时崩溃。但我无法重现它。

是我开始获取用户权限并读取健康数据的代码。

是来自fabric的崩溃信息。

根据崩溃信息,它在从 HealthKit 读取 DOB 时崩溃了,我相信获取 DOB没有问题,我认为崩溃正在发生,因为我正在读取主线程上的健康数据,它可能会遇到一些多线程问题. 尝试了多种设备,但我无法重现该问题。

HealthKit1)关于为什么从on读取数据Main Thread会导致崩溃的任何观点?

2)我正在运行的完成块是否Main Thread 已过期/已解除分配并可能导致崩溃?

谢谢。

0 投票
1 回答
390 浏览

ios - Swift 多线程环境中的 Copy-on-Write

我已经阅读过用于优化的Copy-on-Write概念ArraysSwift.

我想知道的是Copy-on-Write如何在多线程环境中工作。

在上面的代码中,arr1最初arr2的地址与copy-on-write. 但是,它arr3也共享相同的内存arr1arr2尽管它是在不同的线程上执行的。

据我所知,每个线程都有不同的堆栈分配。那为什么arr3还共享同一个位置呢?

有人可以解释一下它是如何工作的。

0 投票
1 回答
945 浏览

ios - 多个异步 API 以所需的顺序填充 uitableview iOS swift

我有多个 API 调用将在获取结果时更新 uitableview。UI 需要在 API 提供数据时更新。所有 API 调用都是异步的。数据必须以正确的顺序填充。API0 应该更新第 0 节,API1 应该更新第 1 节,依此类推。

我已经能够使用 2 个 API 来实现这一点,但是当我使用第 3 个 API 时,我会遇到崩溃。

请在下面找到我的代码:

以上是我的 viewController 代码。

这里的错误是->

表数据源类 ->>

}

有时错误是这样的:-

注意:: 在 2 个 API 调用和调度组不能使用的情况下它工作正常,因为 UI 需要在任何 API 调用完成并且数据可用时立即更新。多个数组或数据源不能用于多个 API。

0 投票
3 回答
1814 浏览

ios - 如何在后台线程上截取 UIView 的屏幕截图?

我正在开发的应用程序几乎每个屏幕上都有谷歌地图。为了节省内存,我到处重复使用相同的谷歌地图视图。问题是,当您弹出一个 viewController 时,您可以看到地图所在的空白区域。为了解决这个问题,我在删除地图之前对其进行截图并添加为背景。但还有一个问题,在 iPhoneX 上截屏大约需要 0.3 秒(我想在旧手机上更糟)。有没有办法在后台线程上截取 UIView 的屏幕截图?

0 投票
1 回答
125 浏览

ios - 从其他线程调用 UIKit 方法

我有一个必须从非主线程调用的函数。在那个线程中,我试图像这样确定状态栏的方向:

但我显然会收到这样的运行时警告。

我的问题是如果需要,如何确定辅助线程上的状态栏方向?使用 DispatchQueue.main.sync 是正确的方法,但由于潜在的死锁原因是有风险的。

使用 Swift 的安全方法是什么?

0 投票
2 回答
62 浏览

swift - 从线程/ GCD/完成处理程序返回

我有一些逻辑可以从登录屏幕登录用户。如果登录失败,我想显示一条消息让用户知道。如果用户登录成功,我会触发一个 segue。当我使用无效凭据对其进行测试时,错误警报会按预期显示,但即​​使它嵌套在 if-else 语句中,segue 仍会被触发。为什么是这样?我怎样才能退出它并避免 else 块......?我尝试在 DispatchQ/show alert 代码下添加“return”,但没有任何效果。

登录: