定位于定位优化

1.定位的方案

最近在做项目, 遇到了一个问题就是如何让iOS7~~iOS9的定位.因为项目需求只是需要获取用户所在的城市, 而不用十分具体详细的精确定位, 服务端考虑用区号, 作为标识,但是看了百度的SDK, 不忍吐槽.最后决定用高德的SDK进行定位的开发.高德的定位SDK也是基于CoreLocation框架进行二次的开发, 但是其提供具体的区号, 十分方便与服务端进行相应的逻辑开发.如果用原生的, 在大陆可能存在各种各样的问题, 因为大陆的iphone手机有韩版, 日版, 欧版, 美版, 就差没非版了, 这些手机获取的定位信息会存在七七八八的非中文编码, 十分头疼.所以就采用高德的定位SDK进行统一的定位解决.

2.定位的逻辑

使用高德的SDK定位, 十分简单, 直接导入其框架的主头文件

import <AMapLocationKit/AMapLocationKit.h>

.不要问我框架的主头文件是啥.接着直接使用高德的一次性定位,

[self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {

                if (!error) {   

                }
}];

在异步回调的block中就有相应的信息.如果出错error会有值, 不为空.

3.用户的体验:(跳转到开启定位服务)

我们知道当用户关闭定位服务, 或者禁止本程序进行定位的时候,最后是能在App中就直接跳转到相应的设置界面进行设置.这里为了程序的兼容和响应速度, 我采用CCLocationManager这个自带的类进行判断.为什么不使用高德的一次性定位, 进行间接的判断, 当error有值时候,提示开启定位服务.这里主要存在的问题是因为, 高德提供的一次性定位, 的定位速度不快, 我自己用起来都觉得很慢, 所以当用户点了定位, 还用等你去做定位请求后, 再通过这个定位结果判断是否开启定位服务, 是十分不合理的.所以我的思路便是采用CCLocationManager进行精确度最低的定位.

具体的逻辑就是

1.先判断定位服务是否开启

2.如果定位服务开启, 则判断当前程序的定位权限是否授权.我是直接通过CCLocationManager对象的startUpdatingLocation方法, 让其开始定位,然后在代理方法中进行判断,如果定位权限是开启的就会回调

locationManager:didUpdateLocations:

否则回调的是

locationManager:didFailWithError:

而当回调了didUpdateLocations时候我们就可以断定,定位服务是开启的,并且定位权限已经授权给应用程序, 则可以调用高德的SDK开始定位, 或者跳转到响应控制器中进行定位和具体的业务处理.

当然了, 不管是调用了上面哪个的代理方法, 都用调用定位管理器stopUpdatingLocation, 停止定位.因为我们只是需要知道这个信息, 不需要再继续定位.

4.关于定位的优化:

在程序中关于定位我做了两重的优化.或者说是缓存.

第一级缓存: 一进入应用程序后, 如果定位服务是开启的, 则开一个优先级最高的线程进行高德的一次定位.如果定位成功, 则将缓存中的定位信息清空, 写入新的定位信息.

第二季缓存: 在经过响应的控制器进行定位之前, 先从一级缓存中取到定位信息.如果有定位信息, 则不再进行高德的一次性定位, 如果没有定位信息, 则继续进行高德的一次性定位, 如果定位成功, 将定位信息写入缓存.

经过这样的优化, 定位服务是十分快速的~具体工程代码不披露了.涉及到公司的业务.大概的技术思路就是这样.

后续会用空,我会封装适用于国内的一个定位的第三方框架.上传到github, 敬请关注

定位于定位优化(iOS)的更多相关文章

  1. 移动端底部fixed固定定位输入框ios下不兼容

    简短记录下最近开发移动端项目碰到的小坑,产品需求做一个售后对话页面,底部固定输入框,和微信对话差不多,但是在ios下,fixed失效,输入框被虚拟键盘挡住,在安卓下是正常的. 尝试过网上说的很多方法, ...

  2. 微信H5页面嵌入百度地图---解决手机的webKit定位,ios系统对非https网站不提供支持问题

    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=yGQt ...

  3. Mali GPU OpenGL ES 应用性能优化--測试+定位+优化流程

    1. 使用DS-5 Streamline定位瓶颈 DS-5 Streamline要求GPU驱动启用性能測试,在Mali GPU驱动中激活性能測试对性能影响微不足道. 1.1 DS-5 Streamli ...

  4. 优化iOS程序性能的25个方法

    1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自己主动引用计数)和iOS5一起公布.它避免了最常见的也就是常常是因为我们忘记释放内存所造成的内存泄露.它自己 ...

  5. 基于vue-cli项目打包慢的定位优化过程

    入职一周后,上一个前端就离职了(超级坑爹的),留下了一个比较棘手的问题,就是基于vue-cli的项目打包超级慢,我接手项目的时候,打包需要45min(上个离职者也不知道原因),经过3个月之后,随着项目 ...

  6. unity3d优化IOS

    1. using UnityEngine; class GarbageCollectManager : MonoBehaviour {       public int frameFreq = 30; ...

  7. iOS定位原理和使用建议(转)

    原文:http://ibbs.91.com/thread-1548870-1-1.html 看到很多网友讨论iOS设备定位的问题,这里将我们所了解的关于iPhone.iPad.iPod等的定位原理做详 ...

  8. iOS开发——高级篇——地理定位 CoreLocation

    一.CoreLocation 在移动互联网时代,移动app能解决用户的很多生活琐事,比如周边:找餐馆.找KTV.找电影院等等导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达 在上述应用 ...

  9. iOS定位服务编程详解

    现在的移动设备很多都提供定位服务,使用iOS系统的iPhone.iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星 i ...

随机推荐

  1. c语言const

    const关键字 const和指针结合,共有4种形式 const int *p; p是一个指针,指针指向一个int型数据.p所指向的是个常量. int const *p; p是一个指针,指针指向一个i ...

  2. JavaScript 获取CSS媒体查询信息

    var result = window.matchMedia('(max-width: 700px)'); if (result.matches) { console.log('页面宽度小于等于700 ...

  3. javascript自定义浏览器右键菜单

    javascript自定义浏览器右键菜单   在书上看到document对象还有一个contextmenu事件,但是不知为什么w3school中找不到这个耶... 利用这个特性写了个浏览器的右键菜单, ...

  4. MySQL server version for the right syntax to use near &#39;type=InnoDB&#39; at line 1

    转载请注明出处:http://blog.csdn.net/bettarwang/article/details/40180271 在执行一个Hibernate的演示样例时,配置了<propert ...

  5. Linux命令vi/vim编辑

    一.vi的基本概念基本上vi可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:a) 命令 ...

  6. 【转】Cocoa中的位与位运算

    转自:http://www.tuicool.com/articles/niEVjy 介绍 位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常 ...

  7. [转]iOS hybrid App 的实现原理及性能监测

    转自:http://www.cocoachina.com/ios/20151118/14270.html iOS hybrid App 的实现原理及性能监测 2015-11-18 11:39 编辑:  ...

  8. C# Excel 读取为Datatable

    最近项目用到的读取Excel 为DataTable 兼容2003.2007.2010.记录一下,以后会用到 引用 NPOI.dll 和 EPPlus.dll using System; using S ...

  9. 记一次令人发狂的 bug Eclipse 开不开 tomcat 7.0

    改项目,结果发现以前的项目也出了问题,就删除了系统用户下面workplace里的文件夹,结果,eclipse被清空,重新添加项目,发现一堆bug; 最让我崩溃的是,用tomcat 7.0跑项目,反复出 ...

  10. Opencv 函数

    1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cvWaitKey:使程序 ...