我注意到在我的应用程序中,当我调用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];
}
任何想法?谢谢!
答案 0 :(得分:1)
那是因为你在主线程中获取位置,而主线程用于负责UI的东西。即用户触摸事件。这就是为什么你觉得你的应用有点滞后。
如果您在主线程中执行大型任务(例如从Web服务器获取数据),这是很正常的。您可以设置“加载”旋转视图来指示用户,而不是让您的UI冻结。
或者,您可以尝试在另一个线程中获取该位置。我也试图这样做,但我还没有成功。所以我目前正在采用第一种方法。
答案 1 :(得分:0)
您可以在后台查看我对位置服务的使用。基本上,我在主线程中设置了位置管理器,但接收到位置事件的所有处理都是在后台线程上完成的。
这将允许您的主线程继续而不会阻塞。