我何时应该停止更新位置管理器?

时间:2013-06-05 03:00:44

标签: ios objective-c mapkit cllocationmanager

我有一个应用程序可以调用以获取用户的位置:

-(void)getLocation{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];

}
//SET USER LOCATION
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    self.userLocation = [locations lastObject];
    NSLog(@"location in IntroVC %f, %f", self.userLocation.coordinate.latitude, self.userLocation.coordinate.longitude);
}

我的问题是,因为NSLog一直无限地吐出一个新的位置,我何时应该停止呼叫该位置?嗯,我想它真的取决于我的应用程序的功能,但这不会导致电池耗尽吗?如果是这样,我应该真正研究停止更新的最佳方法。

3 个答案:

答案 0 :(得分:10)

位置管理器的距离过滤器设置为kCLDistanceFilterNone。这会导致didUpdateLocations方法被称为无限时间。

locationManager.distanceFilter = kCLDistanceFilterNone;

将此行更改为

locationManager.distanceFilter = 10;

然后再试一次。根据需要更改值。

所以现在didUpdateLocation不会被无限次调用。 :)

希望这有帮助。

答案 1 :(得分:0)

根据应用的性质,您可能希望在进入后台或屏幕锁定时关闭位置服务。这些通知挂钩通常在您的应用委托文件(.m)中提供。是的,你是对的,定位服务显着消耗了电池,对于使用定位服务的iOS应用程序来说,这是一个强烈推荐的做法,谨慎使用它。

Apple似乎已经考虑过这一点,并提供了一个API,只有当用户“显着”移动了Apple the significant change location service时才会通知应用程序。 “显着移动”的定义因各方面而异,具体取决于WiFi可用性,手机信号塔可用性,GPS可用性等。幸运的是,所有这些都在此API中进行了混淆。

答案 2 :(得分:0)

我在更新didupdateloactions中的位置后调用此方法,因此当我的应用程序进入后台时,它会从顶部状态栏中删除位置图标。