在location == nil时读取CLLocationManager.monitoredRegions会阻塞主线程几秒钟

时间:2018-08-08 10:05:08

标签: ios cllocationmanager geofencing

我遇到了CLLocationManager的奇怪行为:
由于我的应用程序使用地理围栏,因此已设置为始终启用位置使用情况。
当应用启动且尚未定位时(即CLLocationManager.location == nil),并且尝试读取CLLocationManager.monitoredRegions时,此读取操作会阻塞主线程几秒钟。
我为调试而编译,但是在我的方案中,我没有启用任何诊断选项,因此这不会显着降低执行速度。
我通过设置超时时间为1.5秒的main thread watchdog检查了此主线程阻塞,并在CLLocationManager的子类中使用了以下代码:

let begin = Date()
for nextRegion in self.monitoredRegions {
  let next = Date()
}  

由于在循环中的指令之前,即在完成self.monitoredRegions的读取之前,超时导致监视程序停止执行。看门狗警报时间与begin之间的时差始终为几秒钟。

我的问题是:

这是正常行为吗?如果是这样,则只能通过单独的线程访问此属性。如果没有,那么漫长的访问时间可能是什么原因?

编辑:
这只会在设备(iPhone X)上发生,而不会在模拟器上发生。

0 个答案:

没有答案