我正在尝试从后台线程请求用户位置,并且一旦收到,就从此后台线程处理回调(didUpdateLocations
)。后台线程使用[NSThread detachNewThreadSelector: toTarget: withObject:]
根据CLLocationManagerDelegate的Apple文档:
从您启动相应位置服务的线程调用委托对象的方法。该线程本身必须有一个活动的运行循环,就像在应用程序的主线程中找到的那样。
我已经检查过请求肯定是在后台线程上,并且回调肯定在主线程上使用[NSThread currentThread]
。
因此,我调用startUpdatingLocations
的后台线程要么没有活动的运行循环,要么这不是我启动"位置服务的线程"。
我的问题是:当请求显然是来自后台线程时,为什么回调会在主线程上回来?
UPDATE:只是一个想法:也许后台线程在获得回调之前被销毁,杀死了运行循环,所以回调在主线程上执行?