首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Iphone >

ios多线程处理定位有关问题

2012-07-30 
求助:ios多线程处理定位问题第一个问题:使用Core Locatin框架时,有时UI会卡住,请问是网络问题吗?定位时是

求助:ios多线程处理定位问题
第一个问题:使用Core Locatin框架时,有时UI会卡住,请问是网络问题吗?定位时是异步的吗?
由于不知道是否异步,所以用了多线程,代码如下:
dispatch_queue_t where = dispatch_queue_create("where", nil);
dispatch_async(where, ^{
  _whereAmI = [[WhereAmI alloc] init];//进入定位,启动定位代码在init中
  //下面是注线程,刷新UI的
dispatch_async(dispatch_get_main_queue(), ^{
  ModifyViewController *modifyViewController = [[ModifyViewController alloc] init];
  modifyViewController.ispushed = YES;
  [STHUnity sthPushViewController:self viewController:modifyViewController];  
  });
 });

第二个问题:第一次使用GCD,不知用对否?给个说明。因为我用上面的代码,定位一直启动不了,当把GCD的几句代码去掉后,能启动定位,但是那样就回到第一个问题了,求解!!!

[解决办法]
gcd就是这么用的,定位启动不了。你凭什么判断定位没启动的呢?如果确实没启动,可以把init的代码贴上来。主线程刷新ui的代码看不懂你那是在干什么。
[解决办法]
定位是异步回调方式,GCD是在辅线程做延迟操作,在主线程做办面更新。
定位为异步回调方式,所以直接放主线程启动即可。
这里完成不需要使用GCD来处理。
[解决办法]
定位本身是异步的,应该不会卡住UI, 除非你在收到位置信息时搞了很大的动作
[解决办法]
启动定位的代码也没问题。你确定你允许了这个应用定位?另外楼上说的也是对的,定位本来是个异步回调的。没必要放在后台去启动。也许你放到后台去 启动,ios认为你在干坏事,没启动定位。只要你在定位的异步回调函数里面控制好ui就不会卡了。(把操作ui的都放到主线程里面去)

热点排行