Quand dois-je arrêter la mise à jour du gestionnaire de position?

J'ai une application qui appelle pour get l'location de l'user:

-(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); } 

Ma question est, parce que NSLog crache indéfiniment un nouvel location, quand devrais-je cesser d'appeler le lieu? Eh bien, je suppose que c'est vraiment à la fonctionnalité de mon application, mais cela ne provoque pas une décharge de la batterie? Si oui, je devrais vraiment regarder dans le meilleur moyen d'arrêter les mises à jour.

Votre filter Distance du gestionnaire d'location est défini sur kCLDistanceFilterNone. Cela entraîne l'appel de la méthode didUpdateLocations à l'infini.

 locationManager.distanceFilter = kCLDistanceFilterNone; 

Changez cette ligne comme

 locationManager.distanceFilter = 10; 

et essayez à nouveau. Changez la valeur au besoin.

Donc maintenant le didUpdateLocation ne sera pas appelé des heures infinies. 🙂

Espérons que cela aide.

Selon la nature de votre application, vous pouvez désactiver les services de localization lorsque vous passez en arrière-plan ou lorsque l'écran est verrouillé. Ces hooks de notifications sont généralement fournis dans le file de délégué de votre application ( .m ). Oui, vous avez raison, les services de localization drainent considérablement la batterie et c'est une pratique fortement recommandée pour les applications iOS utilisant les services de localization pour l'utiliser avec précaution.

Apple semble avoir pensé à cela et a fourni une API qui notifie l'application que si l'user a déménagé "de manière significative" Apple le service de localization de changement significatif . La définition de «déplacé de manière significative» varie selon les aspects, en fonction de la disponibilité du WiFi, de la disponibilité de la cellule, de la disponibilité du GPS, etc. Heureusement, tout ceci est obscurci dans cette API.

J'appelle cette méthode après avoir mis à jour l'location dans didupdateloactions , donc quand mon application passe en arrière-plan, elle supprime l'icône d'location de la barre d'état supérieure.