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 不断吐出一个新的位置,我应该什么时候停止调用该位置?好吧,我想这真的取决于我的应用程序的功能,但这不会导致电池耗尽吗?如果是这样,我真的应该研究停止更新的最佳方法。

4

3 回答 3

10

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

locationManager.distanceFilter = kCLDistanceFilterNone;

将此行更改为

locationManager.distanceFilter = 10;

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

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

希望这会有所帮助。

于 2013-06-05T04:12:52.280 回答
0

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

Apple 似乎已经考虑到这一点,并提供了一个 API,仅当用户“显着”移动了 Apple的重大更改位置服务时才通知应用程序。“显着移动”的定义在各个方面有所不同,具体取决于 WiFi 可用性、蜂窝塔可用性、GPS 可用性等。幸运的是,所有这些都在这个 API 中被混淆了。

于 2013-06-05T03:17:47.370 回答
0

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

于 2013-12-17T11:57:18.860 回答