是否必须使用startUpdatingMyLocation来调用iphone sdk中的位置管理器的didUpdateToLocation方法

时间:2012-01-17 06:44:20

标签: iphone objective-c cllocationmanager cllocation

我需要澄清一下。是否必须使用startUpdatingMyLocation方法来调用didUpdateToLocation?是不是更新位置时自动调用的didUpdateToLocation方法?

盖伊,请清楚澄清一下。

2 个答案:

答案 0 :(得分:2)

文件说明

  

通过调用startUpdatingLocation启动标准位置服务   方法。此服务最适合需要的应用程序   对位置事件的传递进行更精细的控制。   具体来说,它考虑了desiredAccuracy中的值   和distanceFilter属性,用于确定何时传递新事件。   需要标准位置服务的精确度   导航应用程序或任何高精度的应用程序   需要位置数据或定期更新流。然而,   这些服务通常需要位置跟踪硬件   启用更长的时间,这可以导致更高的功率   的使用。

     

对于不需要常规位置事件流的应用程序,   考虑使用startMonitoringSignificantLocationChanges方法   开始交付事件。这种方法更合适   对于大多数只需要初始用户的应用程序   位置修复,仅在用户移动重要时才需要更新   距离。此接口仅在检测到时才提供新事件   更改设备的相关单元塔,导致更少   频繁更新并显着降低功耗。

     

无论您使用哪种位置服务,位置数据都是   通过位置管理器的关联报告给您的应用程序   委托对象。因为它可能需要几秒钟才能返回   初始位置,位置管理员通常提供   以前缓存的位置数据,然后提供更多   最新的位置数据,因为它可用。因此它是   总是一个好主意检查任何位置对象的时间戳   在采取任何行动之前。如果两个位置服务都已启用   同时,他们使用同一组委托来传递事件   方法

因此,您可以使用startUpdatingLocationstartMonitoringSignificantLocationChanges中的任何一个来获取位置更新,但是您必须为调用的委托方法调用其中任何一个。 (IMHO)

答案 1 :(得分:1)

通过调用startUpdatingLocation方法启动标准位置服务。此服务最适合需要对位置事件传递进行更细粒度控制的应用程序。具体来说,它会考虑desiredAccuracy和distanceFilter属性中的值,以确定何时传递新事件。导航应用程序或需要高精度位置数据或常规更新流的任何应用程序都需要标准位置服务的精度。但是,这些服务通常需要启用位置跟踪硬件更长的时间,这可能会导致更高的功耗。

对于不需要常规位置事件流的应用程序,请考虑使用startMonitoringSignificantLocationChanges方法来开始传递事件。此方法更适合大多数仅需要初始用户位置修复的应用程序,并且仅在用户移动较远距离时才需要更新。此接口仅在检测到设备关联的蜂窝塔的更改时才会发送新事件,从而减少更新频率并显着降低功耗。

无论您使用哪种位置服务,都会通过位置管理器的关联委托对象向您的应用程序报告位置数据。由于返回初始位置可能需要几秒钟,因此位置管理器通常会立即提供先前缓存的位置数据,然后在可用时提供更多最新的位置数据。因此,在采取任何操作之前检查任何位置对象的时间戳总是一个好主意。如果同时启用两个位置服务,则它们使用同一组委托方法传递事件。

相关问题