The accuracy of the locations returned by the CLLocationManager is determined by the desiredAccuracy , which by default is kCLLocationAccuracyBest , and the device accuracy available. For example, you can get less accurate locations if the device’s battery is running low, or you can get more accurate locations if they are still cached from another application.
However, obtaining incredibly accurate coordinates depletes a significant portion of the energy from the battery and dumps the device. Applications in the background are probably limited by a much lower accuracy resolution to improve battery performance.
Accurate locations require a lot of power to use GPS radio, while less accurate locations can rely on nearby Wi-Fi access points and cell phone towers within the range of the phone.
When your application resumes from the background, the system will try to increase the accuracy of the results. This is a complex concept, but take a look at the Maps app on your phone. At first, the circle representing your location is very large; as the system gets a more accurate picture of your location, the circle gets smaller. This visualization is a phone with more power to get a more accurate location.
You will see a similar phenomenon with CLLocationManager when your application resumes from the background: you will get an inaccurate location and receive subsequent, more accurate updates.
This is a trade-off between the convenience and battery life that Apple should have when developing its APIs. The first update for the user's location is likely to be less accurate, unless they just use the Maps application and the location is cached.
The best advice I can give you is to listen to subsequent updates from your location manager and update your interface accordingly. Good luck
Ash furrow
source share