标签:
此组件对位置管理及位置刷新进行了多线程封装,支持多线程并行调用,单例模式方便最终调用及管理,其中位置变动监控支持链条式监听器,当位置有更新时所有监听器均会顺序触发。
代码由三部分组成,一个Operation基类、一个位置相关请求Opertion类、一个单例位置管理器。
三种状态的operation基础管理,如启动、取消、错误结束、结束等方法,预留了start和willfinish两个接口由子类实现,此operation运行在mainThread下、可以更新主界面。
位置请求类时Operation的子类,包括请求GPS位置、请求地址信息、根据GPS反地理编码地址信息、根据地址信息地理编码GPS信息,类方法返回的时请求对象,这些请求方法均为异步、支持completion block,在block中处理结果数据。此请求实现时通过启动CLLocationManager实例startUpdatingLocation方法获取位置信息,并同时启动了一个定时器,如果长时间未反馈GPS数据则做超时处理,跟地理编码相关的功能均使用的google maps公开API,位置可能跟国内实际地址有差异。
位置管理器为单例模式,支持多线程调用,对外提供位置刷新、请求地址、请求编码/反编码、位置变动监控等,其中位置变动监控使用的SignificateModify模式,对电池消耗低,此位置监控新创建了CLLocationManager实例并使用startMonitoringSignificantLocationChanges监控位置变化,位置变动时会触发一连串监听器的handlerBlock。
Git地址:https://github.com/malcommac/DMLocationManager
标签:
原文地址:http://www.cnblogs.com/wolfcamel/p/4302427.html