我有一个应用程序可以调用以获取用户的位置:
-(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一直无限地吐出一个新的位置,我何时应该停止呼叫该位置?嗯,我想它真的取决于我的应用程序的功能,但这不会导致电池耗尽吗?如果是这样,我应该真正研究停止更新的最佳方法。
答案 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
中的位置后调用此方法,因此当我的应用程序进入后台时,它会从顶部状态栏中删除位置图标。