利用 Core Location 和 Map Kit 定位:开发“WhereAmI”应用
1. 明智使用位置管理器
如果仅需确定当前位置且无需持续更新,应让位置委托在获取应用所需信息后立即停止位置管理器。若需轮询,应尽快停止。因为只要从位置管理器获取更新,就会消耗用户电池电量。
要停止位置管理器向其委托发送更新,可调用 stopUpdatingLocation
方法,示例代码如下:
locationManager.stopUpdatingLocation()
2. 位置管理器委托
位置管理器委托必须遵循 CLLocationManagerDelegate
协议,该协议定义了多个可选方法。当用户对使用位置服务的授权状态改变、确定当前位置或检测到位置变化,以及位置管理器遇到错误时,会分别调用不同的方法。在应用中需实现这些委托方法。
3. 获取位置更新
当位置管理器要通知其委托当前位置时,会调用 locationManager(_, didUpdateLocations:)
方法。该方法有两个参数:
- 第一个参数是调用该方法的位置管理器。
- 第二个参数形式上是 AnyObjects
数组,但实际包含描述设备当前位置及可能的前几个位置的 CLLocation
对象。若短时间内有多次位置更新,可能通过一次调用该方法一并报告。最新位置始终是数组的最后一项。