【发布时间】:2015-08-04 14:19:47
【问题描述】:
我对 Swift GCD 完全陌生。有人能解释一下 GCD 中后台线程的想法吗? 我想使用后台线程(永远不应该被杀死)连续获取传感器数据并在主线程中运行 UI 和其他东西(假设应用程序在前台运行)。目前,我尝试过这样的事情(在 AppDelegate.swift 的“应用程序”功能中):
dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_BACKGROUND.value), 0)) {
dispatch_async(dispatch_get_main_queue()) {
SensorCollection.sensorActivate(CMMotionManager())
}
}
SensorCollection :我创建的传感器集合类。 sensorActivate :一个类函数。 CMMotionManager() : 内置的快速运动管理器。
【问题讨论】:
-
您遇到了什么问题?上面的代码说要在后台启动一个任务,以便在主线程上启动对
sensorActivate()的调用。这似乎与您提出的问题没有任何关系。您是否开始阅读介绍所有这些的并发编程指南? developer.apple.com/library/mac/documentation/General/… -
与@RobNapier 的评论分开,可能还值得一提的是,如果您想创建并拥有一个线程,那么您应该通过
NSThread来完成。不要只从 GCD 线程池中取出一个线程。只有一小部分。 -
“有人能解释一下 GCD 中后台线程的想法吗”apeth.com/iOSBook/ch38.html
-
@Tommy iOS 开发人员永远不应该使用
NSThread(我想说“几乎永远不会”,但我想不出今天它是正确工具的单一案例)。你是对的,你不应该尝试“使用 GCD 线程”或类似的东西。您必须以不同的方式考虑问题,让 GCD 自己管理线程。 -
@RobNapier 绝对;对我的评论的正确编辑是将“如果你想要”切换为“如果你需要”并添加警告:你不需要。
标签: ios iphone multithreading swift grand-central-dispatch