我何时应该停止更新位置管理器?
我有一个应用程序拨打电话获取用户的位置:
-(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
的位置后调用此方法,因此当我的应用程序进入后台时,它会从顶部状态栏中删除位置图标。