Любой побочный эффект CLLocationManager с NSTimer, используя такой подход? - PullRequest
0 голосов
/ 02 декабря 2011

Я работаю над приложением для iPhone, которое требует обновления местоположения с интервалами, указанными пользователем.Вот пример кода, который я использую для этого:

@implementation TestLocation
- (void)viewDidLoad{
    if ([Utils getDataWithKey:TIMER_INTERVAL] == nil) {
        [Utils saveDataWithKey:TIMER_INTERVAL withValue:@"60.0"];
    }
    locationManager = [[[CLLocationManager alloc] init] autorelease];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    [locationManager startUpdatingLocation];
}
- (void)startLocationManager:(NSTimer *)timer{  
    [locationManager startUpdatingLocation];
    [timer invalidate];
    timer = nil;
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    // Here is code to handle location updates... 
    [manager stopUpdatingLocation];

    // Timer will start getting updated location.
    NSTimeInterval timeInterval = [[Utils getDataWithKey:TIMER_INTERVAL] doubleValue];
    [NSTimer scheduledTimerWithTimeInterval:timeInterval
                                     target:self
                                   selector:@selector(startLocationManager:)
                                   userInfo:nil
                                    repeats:NO];

}
// other implementations ...
@end

Код работает как шарм.

Вопрос:

Я использую CLLocationManager вместе с NSTimer, влияет ли это память или батарея потребление?Я имею в виду какое-либо негативное влияние на пользовательский опыт?

Если да, то любые предложения, помогающие ссылкам выполнить эту задачу с оптимизацией, будут высоко оценены.

Примечание: Utils - мой класс для хранения или извлечения данных.

Ответы [ 2 ]

1 голос
/ 04 апреля 2012

Это не очень хорошая стратегия, потому что вы можете получить несколько событий асинхронного определения местоположения до первого вызова [manager stopUpdatingLocation].Это приведет к экспоненциальному количеству созданных таймеров.

Вместо этого просто запустите повторяющийся таймер после создания вашего менеджера местоположений и по-прежнему останавливайте менеджер местоположений после каждого полученного события.

1 голос
/ 02 декабря 2011

Да, это будет иметь некоторые побочные эффекты, вы не получите желаемой точности.Поскольку он будет вызывать locationManager:didUpdateToLocation:fromLocation: каждый раз, когда сигнал GPS будет поступать более точно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...