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

我有一个应用程序拨打电话获取用户的位置:

-(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无限地吐出一个新的位置,我何时应该停止呼叫该位置? 嗯,我想它真的取决于我的应用程序的function,但这不会导致电池耗尽吗? 如果是这样,我应该真正研究停止更新的最佳方法。

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

 locationManager.distanceFilter = kCLDistanceFilterNone; 

将此行更改为

 locationManager.distanceFilter = 10; 

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

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

希望这会有所帮助。

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

Apple似乎已经考虑过这个问题,并且提供了一个API,只有当用户已经“明显”向Apple移动重要的更改位置服务时才会通知应用程序。 “显着移动”的定义因各方面而异,具体取决于WiFi可用性,蜂窝塔可用性,GPS可用性等。幸运的是,所有这些都在此API中进行了混淆。

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