我试图从后台线程请求用户位置,一旦收到,就处理来自该后台线程的回调(
didUpdateLocations
)。后台线程使用 [NSThread detachNewThreadSelector: toTarget: withObject:]
启动
根据 CLLocationManagerDelegate 的 Apple 文档:
委托对象的方法是从启动相应位置服务的线程中调用的。该线程本身必须有一个活动的运行循环,就像应用程序主线程中的运行循环一样。
我已经使用
[NSThread currentThread]
检查了请求肯定在后台线程上,并且回调肯定在主线程上。
所以我调用的这个后台线程
startUpdatingLocations
要么没有活动的运行循环,要么这不是我启动“位置服务”的线程。
我的问题是:当请求显然来自后台线程时,为什么回调会返回到主线程?
更新: 只是一个想法:也许后台线程在获取回调之前被销毁,杀死了运行循环,以便回调在主线程上执行?
文档可能不准确。现在已更新为:
Core Location 在运行循环中调用委托对象的方法 从您初始化 CLLocationManager 的线程中。
所以它似乎基于您创建位置管理器的线程,而不是您调用的线程startUpdatingLocations
。