当从后台线程调用 startUpdatingLocation 时,CLLocationManagerDelegate didUpdateLocations 回调会返回到主线程

问题描述 投票:0回答:1

我试图从后台线程请求用户位置,一旦收到,就处理来自该后台线程的回调(

didUpdateLocations
)。后台线程使用
[NSThread detachNewThreadSelector: toTarget: withObject:]

启动

根据 CLLocationManagerDelegate 的 Apple 文档:

委托对象的方法是从启动相应位置服务的线程中调用的。该线程本身必须有一个活动的运行循环,就像应用程序主线程中的运行循环一样。

我已经使用

[NSThread currentThread]
检查了请求肯定在后台线程上,并且回调肯定在主线程上。

所以我调用的这个后台线程

startUpdatingLocations
要么没有活动的运行循环,要么这不是我启动“位置服务”的线程。

我的问题是:当请求显然来自后台线程时,为什么回调会返回到主线程?

更新: 只是一个想法:也许后台线程在获取回调之前被销毁,杀死了运行循环,以便回调在主线程上执行?

ios objective-c iphone xcode cllocationmanager
1个回答
0
投票

文档可能不准确。现在已更新为:

Core Location 在运行循环中调用委托对象的方法 从您初始化 CLLocationManager 的线程中

所以它似乎基于您创建位置管理器的线程,而不是您调用的线程startUpdatingLocations

© www.soinside.com 2019 - 2024. All rights reserved.