我遇到了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)上发生,而不会在模拟器上发生。