CLLocationManager startUpdatingLocation导致延迟

时间:2012-05-11 04:29:49

标签: ios cllocationmanager

我注意到在我的应用程序中,当我调用startUpdatingLocation时,我的UI会短暂锁定,而我认为设备会收集位置数据。这是典型的,有没有办法限制这个?继承人我的代码是什么样的

    -(void)getUserLocation {
    if (!locationManager) 
    {
        locationManager = [[CLLocationManager alloc]init];
    }

    [locationManager setDelegate:self];
    [locationManager startUpdatingLocation];

}

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

    self.userCoordinate = newLocation.coordinate;

    NSLog(@"user coordinate in location manager: %f,%f",self.userCoordinate.latitude,self.userCoordinate.longitude);
    [locationManager stopUpdatingLocation];
    locationManager = nil;

    userLocationAvailable = YES;
    [self getDataForScrollView];

}

任何想法?谢谢!

2 个答案:

答案 0 :(得分:1)

那是因为你在主线程中获取位置,而主线程用于负责UI的东西。即用户触摸事件。这就是为什么你觉得你的应用有点滞后。

如果您在主线程中执行大型任务(例如从Web服务器获取数据),这是很正常的。您可以设置“加载”旋转视图来指示用户,而不是让您的UI冻结。

或者,您可以尝试在另一个线程中获取该位置。我也试图这样做,但我还没有成功。所以我目前正在采用第一种方法。

答案 1 :(得分:0)

您可以在后台查看我对位置服务的使用。基本上,我在主线程中设置了位置管理器,但接收到位置事件的所有处理都是在后台线程上完成的。

这将允许您的主线程继续而不会阻塞。

请参阅此处的代码TTLocationHandler GitHub Repository