2013-06-05 58 views
3

我有一个应用程序,使一个调用来获取用户的位置:什么时候应该停止更新位置管理器?

-(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保持无限吐出一个新的位置,当我应该停止调用的位置?那么我想它真的取决于我的应用程序的功能,但不会导致电池消耗?如果是这样,我应该看看停止更新的最佳方法。

回答

10

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

locationManager.distanceFilter = kCLDistanceFilterNone; 

更改此行

locationManager.distanceFilter = 10; 

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

所以现在didUpdateLocation不会被称为无限次。 :)

希望这有助于。

0

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

苹果似乎已经想到了这一点,并提供了一个API,只有当用户“显着”移动Apple the significant change location service时才会通知该应用程序。 “显着移动”的定义取决于WiFi的可用性,手机信号塔可用性,GPS可用性等各个方面的不同而变化。幸运的是,所有这些在这个API中被混淆了。

0

我在didupdateloactions中更新位置后调用此方法,所以当我的应用在后台运行时,它会从顶部状态栏中删除位置图标。

相关问题