Вычисление timeIntervalSinceNow с отрицательным значением (пример CLLocation)?

Я не понимаю этот пример из документа: timeIntervalSinceNow Метод должен показывать положительное значение, но как мы можем достичь "5", как указано в коде? (я думаю, что это либо 0 больше или меньше, либо -10, -20, -30 и т. д.... но как мы можем получить положительное значение, например 5?):

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    // test the age of the location measurement to determine if the measurement is cached
    // in most cases you will not want to rely on cached measurements
    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
    if (locationAge > 5.0) return;

Спасибо за вашу помощь

2 ответа

Решение

Если результат timeIntervalSinceNow Вызов отрицательный (это означает, что отметка времени в прошлом (что, в данном случае, всегда будет)), она будет преобразована в положительное число. -2.5 станет +2.5например (и наоборот).

Затем вы проверяете значение перевернутого знака, чтобы увидеть, не превышает ли оно 5,0 - в этом случае это означает, что отметка времени была более пяти секунд назад. Если это так, вы ничего не делаете с данными о местоположении, потому что они слишком стары, чтобы быть полезными.

Лично я написал бы это без инверсии знака, используя отрицательное число в тесте:

 if( [[newLocation timestamp] timeIntervalSinceNow] < -5.0 ) return;

Вот что документация NSDate должна сказать о timeIntervalSinceNow:

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

В этом случае отметка времени была записана в прошлом, и она всегда будет раньше, чем "сейчас". Если, с другой стороны, вы используете timeIntervalSince1970, результат будет положительным.

Другие вопросы по тегам