CLLocationManager的startMonitoringSignificantLocationChanges()和startUpdatingLocation()方法有什么区别?

时间:2016-02-09 06:54:18

标签: ios objective-c swift cllocationmanager cllocation

我正在使用CLLocationManager课程。我想定期获取位置更新。我找到了两种方法来获取didUpdateLocations方法中的位置,即startUpdatingLocation()startMonitoringSignificantLocationChanges()。如果我必须在前台模式中跟踪位置更新,那么我应该使用哪种方法?

2 个答案:

答案 0 :(得分:4)

2之间最重要的区别是:

  

startMonitoringSignificantLocationChanges:它不依赖distanceFilter属性中的值来生成事件。仅当检测到用户位置发生重大变化时,接收器才会生成更新事件

     

startUpdatingLocation:接收器主要在超出distanceFilter属性值时生成更新事件

因此,如果您想要更高的精度,请选择startUpdatingLocation,但需要更多的电池消耗,但位置更精确。这实际上取决于你的目标,你应该评估权衡。

答案 1 :(得分:3)

  

startMonitoringSignificantLocationChanges异步启动位置事件的传递,在您调用之后不久返回。位置事件将传递给您委托的locationManager:didUpdateLocations:方法。要传递的第一个事件通常是最近缓存的位置事件(如果有),但在某些情况下可能是较新的事件。在返回当前位置修复之后,接收器仅在检测到用户位置的显着变化时才生成更新事件。只要设备从之前的通知移动500米或更长时间,应用就会收到通知。

总结startMonitoringSignificantLocationChanges只会在位置变化大约500米左右或经过一段固定时间(例如5分钟)后才会为您提供位置。 startUpdatingLocation将根据distanceFilter属性集为您提供位置的位置。 distanceFilter的默认值为kCLDistanceFilterNone,报告所有动作。

  

startUpdatingLocation立即返回。调用此方法会导致位置管理器获取初始位置修复(可能需要几秒钟),并通过调用其locationManager:didUpdateLocations:方法来通知您的委托。之后,接收器主要在超出distanceFilter属性值时生成更新事件。但是,更新可能会在其他情况下提供。例如,如果硬件收集更准确的位置读数,接收器可以发送另一个通知。